未复制引用的库

发布于 2024-12-03 03:10:13 字数 495 浏览 1 评论 0原文

我有 ProjectA(WPFApplication) 引用 ProjectB(ClassLibrary)。 在ProjectB内部,我有一个wpf窗口,它使用来自ThirdParty.dll的控制,我相应地从ProjectB引用。

问题是它在 ProjectA 的输出文件夹中找不到 ThirdParty.dll ,并且引发了 xaml 解析运行时异常。 GAC中没有ThirdParty.dll。 本地复制设置为 true。 如果我在 ProjectA 的输出文件夹中手动添加该库,它就可以工作;如果我在 cs 文件中的某处使用 ThirdParty.dll ,它也可以工作。

我该如何解决这个问题?

I have ProjectA(WPFApplication) that references ProjectB(ClassLibrary).
Inside ProjectB i have wpf window that uses control from ThirdParty.dll wich i accordingly reference from ProjectB.

The problem is that it doesn't find ThirdParty.dll in output folder of ProjectA and xaml parse runtime exceprion is raised.
There is no ThirdParty.dll in GAC.
Copy Locally is set to true.
It works if i manually add in output folder of ProjectA that library and it also works if i use that ThirdParty.dll somwhere right in my cs files.

How can i solve that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陌上芳菲 2024-12-10 03:10:14

原因是如果设置了“复制本地”,则 Visual Studio 仅将资源复制到输出文件夹。只需将引用设置为“复制本地”即可。

查看此链接了解如何执行此操作作品。

当您引用 ProjectA 时,不会自动引用 ProjectB 中的引用。为此,如果您仅在 XAML 中使用它,则还需要从 ProjectA 添加对 ThirdParty.dll 的引用。编译器不会复制仅在 XAML 中使用的引用。但如果您在代码中使用它们,它们就会被复制。

这与此处讨论的问题相同< /a>

The reason for this is that visual studio only copies resources to the output folder if Copy Local is set. Just set the reference to Copy Local and you should be fine.

Check out this link on how this works.

When you reference ProjectA, the references from ProjectB is not automatically referenced. For this to work, you need to add a reference to ThirdParty.dll from ProjectA as well if you only use it in XAML. The compiler does not copy references that are only used in XAML. But if you use them in code, they are copied.

This is the same issue as discussed here

烟沫凡尘 2024-12-10 03:10:14

您应该将对第三方 dll 的引用添加到您希望其出现在输出目录中的项目中。如果 Copy Local 设置为 true,无论您是否在代码或 xaml 中使用它,它都会出现在您的 bin 目录中。

You should add the reference to the thrid party dll to the project where you want it to appear in the output directory. If the Copy Local is then set to true it will appear in you bin directory whether or not you use it in code or xaml.

追我者格杀勿论 2024-12-10 03:10:14

将类似的内容添加到 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 会像 中那样更新此处的路径。

Add something like this to ProjectB.csproj:

<ItemGroup>
   <Content Include="...\path\ThirdParty.dll">
      <Link>ThirdParty.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
   </Content>
</ItemGroup>

This convinces VS to copy ThirdParty.dll to the output folder of ProjectA, too
(no need to add anything to ProjectA about ThirdParty.dll).
I still find it inadequate because if ThirdParty.dll is in a NuGet package, its path usually contains version number, which will change when you update the package.
I haven't tried it yet but I don't expect from NuGet to update the path here as it does in <Reference>.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文