【问题标题】:using assembly.load with a specific file location使用带有特定文件位置的 assembly.load
【发布时间】:2022-01-27 06:47:16
【问题描述】:

我的 Visual Studio 项目中有当前文件结构:

  • 我的项目/
    • 我的启动项目/
      • 斌/
        • 调试/
      • Program.cs
    • 依赖项目/
      • bin/
      • dll/
        • MyAssembly.dll
      • 代码.cs

我的Main() 函数在MyProject/MyStartupProject/Program.cs 中。在Code.cs 里面有一行var assembly = Assembly.Load("MyAssembly");,它应该加载MyProject/DependencyProject/dlls/MyAssembly.dll,但是却导致了错误

System.IO.FileNotFoundException: 'Could not load file or assembly 'MyAssembly' or one of its dependencies.
The system cannot find the file specified.'

但是,如果我将 MyAssembly.dll 复制到 MyProject/MyStartupProject/bin/Debug 中,一切都会运行良好。如何修复此引用,以便项目可以在 dlls 目录下找到它?

【问题讨论】:

  • 您需要将其添加为项目资源,然后将其复制到配置文件中
  • 如何将其添加为项目资源? @Jazb
  • 构建系统不知道你对这个DLL有依赖,所以不会为你复制它。你have to help。或者使用 LoadFrom() 而不是 Load()。或者只是使用项目引用并在代码中使用程序集中的类型。
  • 很高兴知道您找到了解决此问题的解决方案!请考虑接受它作为答案以将其状态更改为已回答。它还将帮助其他人解决类似的问题。见can I answer my own question..,只是一个提醒:)

标签: c# visual-studio dll .net-assembly


【解决方案1】:

尝试将MyAssembly.dll的状态更改为Copy if new

更新:

添加文件

Update2:有没有办法让我直接将其复制到 Debug/ 而无需将原始文件移出 dlls/ 目录?

两种解决方案:

  1. var assembly = Assembly.Load("MyAssembly"); 更改为var assembly = Assembly.LoadFrom("dlls\MyAssembly.dll");

  2. Add

<Target Name="BeforeBuild">
        <Copy
            SourceFiles="dlls\MyAssembly.dll"
            DestinationFolder="bin\Debug"
        />
    </Target>

csproj

csproj:

  1. 卸载项目:

2.双击项目:

【讨论】:

  • 我有一个已设置为 true 的“复制本地”,但没有“复制到输出目录”选项。我正在使用 .NET Framework,如果这有影响的话
  • 请检查我的更新,您是否右键单击此属性?我是 .Net Framework 4.8。
  • 我发现程序集被复制到MyStartupProject/bin/Debug/dlls/MyAssembly.dll,而不是MyStartupProject/bin/Debug/MyAssembly.dll,并且错误仍然存​​在。有没有办法让我直接复制到Debug/ 而无需将原件移出dlls/ 目录?
  • 请查看我的更新,如果您不介意,可以点击“✔”将我的回复标记为已接受答案。它也将帮助其他人解决类似的问题。
  • 我找到了另一种方法来解决我的错误,所以我没有机会尝试你的更新
【解决方案2】:

我通过将以下内容添加到我的 DependencyProject.csproj 解决了我的问题

<ContentWithTargetPath Include="dlls\MyAssembly.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <TargetPath>MyAssembly.dll</TargetPath>
</ContentWithTargetPath>

这会导致 dll 被自动复制到 MyStartupProject/bin/Debug/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2017-08-29
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多