我有 ProjectA(WPFApplication),它引用了 ProjectB(ClassLibrary)。 在 ProjectB 内部,我有一个wpf窗口,它使用来自 ThirdParty.dll 的控件,因此我从 ProjectB 引用。
问题是它在 ProjectA 的输出文件夹中找不到 ThirdParty.dll ,并且引发了xaml解析运行时exceprion。 GAC中没有 ThirdParty.dll 。 “本地复制”设置为true。 它可以工作,如果我手动添加 ProjectA 的输出文件夹该库,如果我在我的cs文件中使用 ThirdParty.dll somwhere它也可以。
我该如何解决?
答案 0 :(得分:5)
原因是如果设置了“复制本地”,Visual Studio仅将资源复制到输出文件夹。只需将引用设置为Copy Local就可以了。
请查看此link,了解其工作原理。
引用ProjectA时,不会自动引用ProjectB的引用。为此,您需要在ProjectA中添加对ThirdParty.dll的引用,如果您只在XAML中使用它。编译器不会复制仅在XAML中使用的引用。但是如果你在代码中使用它们,它们就会被复制。
这与讨论here
时的问题相同答案 1 :(得分:1)
您应该将对第三方dll的引用添加到您希望它出现在输出目录中的项目中。如果Copy Local设置为true,它将显示在您的bin目录中,无论您是否在代码或xaml中使用它。
答案 2 :(得分:0)
将此类内容添加到 ProjectB.csproj :
<ItemGroup>
<Content Include="...\path\ThirdParty.dll">
<Link>ThirdParty.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
这说服VS将 ThirdParty.dll 复制到 ProjectA 的输出文件夹中
(无需向 ProjectA 添加任何关于 ThirdParty.dll 的内容。)
我仍然认为它不合适,因为如果 ThirdParty.dll 在NuGet包中,其路径通常包含版本号,更新包时会更改版本号。
我还没有尝试过,但我不希望NuGet像<Reference>
一样更新路径。