相关疑难解决方法(0)

在探测privatePath时使用绝对路径

在C#控制台应用程序中,我试图<probing privatePath=""/>用来指向不在我的应用程序子目录中的dll.我正在使用:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="D:\Library\References" />
    </assemblyBinding>
</runtime>    
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为privatePath正在我的应用程序中查找子目录.有没有办法以这种方式使用绝对路径?如果没有,指向位于我的应用程序之外的dll的最佳方法是什么?我也尝试使用<codebase>file:///道路,但仍然有System.IO.FileNotFound例外.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity 
        name="MyLibrary" publicKeyToken="29989D7A39ACF230" />
      <codeBase
        version="2.0.0.0"
        href="http://file:///D:/Library/References/NLog.dll"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)

但仍有System.IO.FileNotFound例外.

谢谢!

c#

12
推荐指数
1
解决办法
1万
查看次数

将 WebView2 DLL 嵌入到 wpf 可移植可执行文件中

我正在尝试将 WebView2 DLL 嵌入到 C# 项目中。我添加了 3 个 DLL:

Microsoft.Web.WebView2.Wpf.dll
Microsoft.Web.WebView2.Core.dll
WebView2Loader.dll
Run Code Online (Sandbox Code Playgroud)

作为我的项目的嵌入式资源。由于它是一个 WPF 项目,我不需要 Microsoft.Web.WebView2.Forms.dll。

我已经正确合并了 Newtonsoft.Json.dll。

在调试模式下,没有问题,因为所有DLL都被复制到输出目录。

因为我希望可执行文件是可移植的,所以我只需要一个文件(我知道用 exe 复制 DLL 是可行的,但我需要一个文件)。当我仅将主可执行文件移动到另一个文件夹时,当我使用 webview2 控件时应用程序崩溃(该控件在启动时未加载)。

我试图弄清楚是否所有的 DLL 都参与其中。Microsoft.Web.WebView2.Wpf.dll 已正确嵌入,我不需要在目标文件夹中使用它。

然而,最后两个仍然是必需的。我认为这可能是因为它们是由 Microsoft.Web.WebView2.Wpf.dll 调用的,而不是由主程序集调用的。

如何从主程序集中加载最后两个文件以获得单个执行文件?

编辑:所有 DLL 都作为嵌入式资源添加到项目中

编辑2

感谢@mm8给我部分想法(欢迎任何完整解决方案的建议)实现这一目标。

因此,可以通过添加 3 个 WebView2 DLL 并将它们设置为嵌入资源来将它们嵌入到您的项目中。Microsoft.Web.WebView2.Wpf.dll(或者Microsoft.Web.WebView2.WinForms.dll,取决于您的选择)可以直接加载到内存中。但最后两个(Microsoft.Web.WebView2.Core.dllWebView2Loader.dll)需要保存为文件:

public MainWindow()
{
   // For Newtonsoft.Json.dll, Microsoft.Web.WebView2.Wpf.dll, Microsoft.Web.WebView2.Core.dll and WebView2Loader.dll
   // Incorporation as embedded resource
   // To avoid having multiple files, only one executable
   AppDomain.CurrentDomain.AssemblyResolve += GetEmbeddedDll; …
Run Code Online (Sandbox Code Playgroud)

c# wpf

7
推荐指数
1
解决办法
2130
查看次数

从c#中SetdllDirectory中指定的路径加载dll

我是dotnet的新手.我有一个dotnet dll,c通过使用加载一个dll DllImport.我想将所有dll放在一个与应用程序位置不同的文件夹中.我不想修改环境变量.所以我使用setdlldirectoryAPI并加载我的c#程序集Assembly.Loadfrom(..).我SetdllDirectory通过验证值来检查它是否正常工作GetDllDirectory(..).但它既不从该文件夹加载C#dll也不加载c dll.我可以C#通过specyfing路径加载DLL Assembly.Loadfrom.但是无法加载c dll.

提前致谢!!

c c# windows winapi

6
推荐指数
2
解决办法
2万
查看次数

c# - 探测 privatePath 不起作用

在 app.config 我正在使用

<configuration>
<configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="SMSGateway.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
</configSections>
<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <probing privatePath="OracleLibs" />
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在 OracleLibs 子文件夹中加载 dll,但运行程序时出现错误:

OracleConnection 错误:System.TypeInitializationException:“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常。---> System.DllNotFoundException: 无法加载 DLL 'OraOps12.dll': 找不到指定的模块。(HRESULT 异常:0x8007007E)

任何人都有解决这个问题的想法。谢谢

c# database oracle

5
推荐指数
1
解决办法
3533
查看次数

将自定义文件名设置为引用的dll

我有一个应用程序,它引用程序集“ Library.dll”。我将此程序集的名称更改为“ Library222.dll”,现在我的应用程序失败,出现异常“无法加载文件或程序集...”。如何在运行时指定此dll文件的新名称“ Library222.dll”?我发现此问题将自定义路径设置为引用的DLL吗? 但是在那里指定了dll的文件夹,而不是文件名。我没有更改dll的路径,而是更改了文件名,因此需要指定文件名。

c# dll

2
推荐指数
1
解决办法
1785
查看次数

标签 统计

c# ×5

c ×1

database ×1

dll ×1

oracle ×1

winapi ×1

windows ×1

wpf ×1