在C#控制台应用程序中,我试图<probing privatePath=""/>用来指向不在我的应用程序子目录中的dll.我正在使用:
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="D:\Library\References" />
    </assemblyBinding>
</runtime>    
这不起作用,因为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>
但仍有System.IO.FileNotFound例外.
谢谢!
我正在尝试将 WebView2 DLL 嵌入到 C# 项目中。我添加了 3 个 DLL:
Microsoft.Web.WebView2.Wpf.dll
Microsoft.Web.WebView2.Core.dll
WebView2Loader.dll
作为我的项目的嵌入式资源。由于它是一个 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 都作为嵌入式资源添加到项目中
感谢@mm8给我部分想法(欢迎任何完整解决方案的建议)实现这一目标。
因此,可以通过添加 3 个 WebView2 DLL 并将它们设置为嵌入资源来将它们嵌入到您的项目中。Microsoft.Web.WebView2.Wpf.dll(或者Microsoft.Web.WebView2.WinForms.dll,取决于您的选择)可以直接加载到内存中。但最后两个(Microsoft.Web.WebView2.Core.dll和WebView2Loader.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; …我是dotnet的新手.我有一个dotnet dll,c通过使用加载一个dll DllImport.我想将所有dll放在一个与应用程序位置不同的文件夹中.我不想修改环境变量.所以我使用setdlldirectoryAPI并加载我的c#程序集Assembly.Loadfrom(..).我SetdllDirectory通过验证值来检查它是否正常工作GetDllDirectory(..).但它既不从该文件夹加载C#dll也不加载c dll.我可以C#通过specyfing路径加载DLL Assembly.Loadfrom.但是无法加载c dll.
提前致谢!!
在 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>
在 OracleLibs 子文件夹中加载 dll,但运行程序时出现错误:
OracleConnection 错误:System.TypeInitializationException:“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常。---> System.DllNotFoundException: 无法加载 DLL 'OraOps12.dll': 找不到指定的模块。(HRESULT 异常:0x8007007E)
任何人都有解决这个问题的想法。谢谢
我有一个应用程序,它引用程序集“ Library.dll”。我将此程序集的名称更改为“ Library222.dll”,现在我的应用程序失败,出现异常“无法加载文件或程序集...”。如何在运行时指定此dll文件的新名称“ Library222.dll”?我发现此问题将自定义路径设置为引用的DLL吗? 但是在那里指定了dll的文件夹,而不是文件名。我没有更改dll的路径,而是更改了文件名,因此需要指定文件名。