.NET6桌面程序的DLL如何放在一个指定的lib目录?

因为程序目录的dll太多,怎么像之前.NET FRAMEWORK那样把dll放在指定的目录中?

你可以参考一下,假设你的目录是


MyDesktopApp/
|-- MyDesktopApp.sln
|-- MyDesktopApp/
|   |-- MyDesktopApp.csproj
|   |-- Program.cs
|   |-- MainWindow.xaml
|   |-- ...
|-- lib/
|   |-- SomeLibrary.dll
|   |-- AnotherLibrary.dll
|   |-- ...


然后引用


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
  </PropertyGroup>

  <!-- 添加以下内容来引用 lib 目录下的 DLL -->
  <ItemGroup>
    <Reference Include="SomeLibrary">
      <HintPath>..\lib\SomeLibrary.dll</HintPath>
    </Reference>
    <Reference Include="AnotherLibrary">
      <HintPath>..\lib\AnotherLibrary.dll</HintPath>
    </Reference>
    <!-- 可以继续添加其他需要引用的 DLL -->
  </ItemGroup>

</Project>

  • 看下这篇博客,也许你就懂了,链接:C#把dll分别放在指定的文件夹
  • 您还可以看一下 赵庆明老师的X86软件逆向分析实战(一)课程中的 用C#语言编写一个DLL注入器(2)小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,您希望将.NET 6桌面程序的DLL文件放置在指定的lib目录中。以下是一个解决方案供参考:

    步骤1: 创建lib目录 首先,在您的项目文件夹中创建一个名为"lib"的文件夹,并将您希望放置的DLL文件移动到该目录下。

    步骤2: 修改项目文件 打开您的项目文件(.csproj文件)并添加以下代码:

    <ItemGroup>
      <Content Include="lib\**\*.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>
    

    这段代码将指示.NET编译器将lib目录及其子目录中的所有DLL文件包含在编译输出中,并保持最新。

    步骤3: 动态加载DLL 您可以使用以下代码来动态加载DLL文件并创建类的实例:

    using System.Reflection;
    
    string libPath = Path.Combine(AppContext.BaseDirectory, "lib");
    Assembly[] assemblies = Directory.GetFiles(libPath, "*.dll")
        .Select(x => Assembly.LoadFrom(x))
        .ToArray();
    
    foreach (Assembly assembly in assemblies)
    {
        // 反射示例代码,加载未知类型的类
        dynamic obj = assembly.CreateInstance("类的完全限定名(包括命名空间)");
        // 进行想要的操作
    }
    

    上述代码会首先获取lib目录中的所有DLL文件,并将其加载到内存中的Assembly对象中。然后,您可以使用Assembly对象来创建类的实例并进行相关操作。

    注意事项: - 在代码中使用上面提供的反射示例代码时,确保已经引用了相关类型所在的命名空间。 - 确保库目录中的DLL文件与您的程序兼容并且具有正确的版本。 - 如果您的DLL文件需要其他依赖项,请确保将这些依赖项一起放置在lib目录中,并将其复制到输出目录。

    希望这个解决方案对您有所帮助!如果还有其他问题,请随时提问。

创建运行时配置文件(Runtime Configuration File):在你的项目根目录下创建一个名为 yourapp.runtimeconfig.json 的文件,其中 yourapp 应该替换为你的应用程序名称。

配置运行时库的目录:在 yourapp.runtimeconfig.json 文件中,添加以下内容来指定运行时库的目录:

{
  "runtimeOptions": {
    "additionalProbingPaths": [
      "path/to/your/custom/dll/directory"
    ]
  }
}


在这个配置中,将 path/to/your/custom/dll/directory 替换为你想要放置DLL文件的目录的实际路径。

复制DLL文件:将你的DLL文件复制到指定的目录 path/to/your/custom/dll/directory 中。

运行应用程序:现在,当你运行应用程序时,运行时将会在指定的目录中查找DLL文件,从而正确加载它们。