我有两个.NET标准库,分别编译为Foo.dll
和Bar.dll
。 Bar
包含对Foo
的引用。在我的解决方案中,我有一个.NET Standard类库MyClassLibrary.csproj
,其中包含引用两个DLL的代码。像这样从MyClassLibrary.csproj
引用它们:
<ItemGroup>
<Reference Include="Foo">
<HintPath>..\..\lib\Foo.dll</HintPath>
</Reference>
<Reference Include="Bar">
<HintPath>..\..\lib\Bar.dll</HintPath>
</Reference>
</ItemGroup>
依次从MyClassLibrary.csproj
引用 MyApp.csproj
。
当我构建MyApp
时,两个 DLL都被复制到MyClassLibrary/bin/Debug/netstandard2.0
。但是,仅 Bar.dll
复制到MyApp/bin/Debug/netcoreapp2.1
,结果在运行时出现错误(无法加载文件或程序集'Foo ...' )。另一方面,如果我删除了MyClassLibrary
中调用Bar
的一行代码,则MyApp
最终引用了Foo.dll
,但 Bar.dll
。
如何强制将两个DLL复制到应用程序输出目录?我尝试设置<Private>true</Private>
(在Visual Studio中为“复制本地”),并在两个文件上都设置CopyToOutputDirectory
无效。
答案 0 :(得分:1)
如果直接在文件系统上引用它们,则不会自动引入类库使用的库。有两个选项:
1)MyApp中的参考Foo和Bar
2)为MyClassLibrary创建一个Nuget包,您可以在其中包含或指定依赖项。 https://docs.microsoft.com/en-us/nuget/concepts/dependency-resolution
修改。因为您在“属性”->“包”下使用.NET Standard,所以可以生成一个Nuget包。 如果您不想将其上传到某种形式的提要,则可以使用Nuget的本地提要。 https://docs.microsoft.com/en-us/nuget/hosting-packages/local-feeds