当前位置: 首页 > 编程语言 > C#

将URI打包到引用程序集中的资源分享

时间:2023-04-10 18:51:04 C#

C#学习教程:将URIs打包到ReferencedAssemblies中的Resources我的uri的问题。也许有人可以提供帮助。我正在为第3方软件开发插件(这意味着我无权访问App.config并且无法修改应用程序本身)。该插件位于与exe文件位置不同的文件夹中。我在MyAddin.View.dll中有一个wpf窗口。最近我决定将所有WPF资源移动到一个单独的程序集(称为UI.Shared)中。我添加了UI.Shared.dll作为对MyAddin.View.dll的引用,我还在MyAddin.View.dll窗口中将我的包uri修改为:我确保将Style.xamlBuildAction设置为Resource。UI.Shared.dll与MyAddin.View.dll位于同一文件夹中(但它们都不与应用程序可执行文件位于同一文件夹中)。在设计时一切正常。但是在运行时,我得到:“Set属性‘System.Windows.ResourceDictionary.Source’引发了异常。”内部异常表示:无法加载文件或程序集“UI.Shared,Culture=neutral”或其依赖项之一。该系统找不到指定的文件。在我将资源移动到一个单独的程序集之前,一切都工作正常:(。有人可以帮忙吗?你的URI很好。从VBA调用WPF窗口时我遇到了类似的问题:WPF找不到引用的资源,因为主进程从不同的目录开始。我发现的一个解决方案可能对您的情况也有用:这是一些(未经测试的)C#示例代码,灵感来自我们在生产中使用的一些VB.NET代码:参考程序集中共享的所有资源都已打包。如果对你有用,需要进一步了解C#学习教程,希望你多多关注——//加载项启动时执行此操作varaddinAssembly=Assembly.GetExecutingAssembly();AppDomain.CurrentDomain.AssemblyResolve+=(sender,e)=>{varmissing=newAssemblyName(e.Name);//有时WPF程序集解析器甚至找不到正在执行的程序集...if(missing.FullName==addinAssembly.FullName)returnaddinAssembly;varaddinFolder=Path.GetDirectoryName(addinAssembly.Location);varmissingPath=Path.Combine(addinFolder,missing.Name+".dll");//如果我们在add-in文件夹中找到DLL,则加载并返回它。如果(File.Exists(missingPath))返回Assembly.LoadFrom(missingPath);//没有找到returnnull;};联系管理员删除。如需转载请注明出处: