我有一个WPF应用程序,在解决方案中有3个项目。我有主菜单,它是实际的EXE,报告DLL和应用程序文件DLL,它们都是WPF类库。当我尝试在应用程序文件DLL中使用第三方报告工具时,我收到System.IO错误。我引用了第三方DLL,并设置为在我的应用程序DLL中复制本地。如果我在EXE项目中引用第三方报告工具,但是我不想这样做,一切正常。我希望我的DLL独立,所以其他人可以引用我的DLL,而不必添加任何东西,但我的DLL。任何人都知道我可能需要做些什么来解决这个问题?谢谢
答案 0 :(得分:4)
转到输出目录,使用http://www.dependencywalker.com遍历所有DLL。找到丢失的dll,使用异常为您提供良好的起始位置。
我不相信你想做的事情是可能的。如果你的DLL依赖于其他DLL,那么你的DLL需要访问其他DLL。你不能简单地将其他DLL构建到你的DLL中。
答案 1 :(得分:2)
复制本地意味着它将被复制到当前项目的bin文件夹中,然后在应用程序文件中将其复制到应用程序文件的bin文件夹中,这不是您想要的。
尝试将应用程序文件的输出路径(右键单击项目上的属性 - > gt; Build)更改为exe项目的bin路径
答案 2 :(得分:0)
我以这种方式使用了来自不同dll的ResourceDictionary
:
<UserControl x:Class="DllName1.Class1" .......>
<UserControl.Resources>
<ResourceDictionary Source="pack://application:,,,/DllName2;component/Resources/ResourceStyleDictionaryFileName.xaml" />
</UserControl.Resources>
<DockPanel>
<TextBlock Text="test" Style="{StaticResource ResourceKey=SomeResourceFromOtherDLL}" />
</DockPanel>
</UserControl>
我得到了非常相同的错误,但只是在第一次中加载了Class1。 从第二次开始,它完美无瑕。
所以,我已经程序集绑定失败日志记录(Fusion), on (see here how)并打开 Debug-&gt; windows- &gt;模块列表,我发现DllName2
尚未加载,但第二次加载。
在我的审判期间&amp;错误,我咨询了一位朋友(user1151392),发现如果我使用DllName2中的一个虚拟类,则会在第一次加载Dll。
以下是我最终得到的结果:
<DockPanel>
<!-- weird enough, but that fixed my issue -->
<dll2alias:SomePublicClass />
<TextBlock Text="test" Style="{StaticResource ResourceKey=SomeResourceFromOtherDLL}" />
</DockPanel>
</UserControl>
所以,我猜想为Resources加载dll的机制与加载Instances的机制不同。
谢谢user1151392!