我有一个使用 ClickOnce 部署的 WinForms、C# 解决方案,这会导致资源文件出现一些问题。简而言之,在我使用 ClickOnce 部署后,类库项目中标记为内容的文件不会被复制到输出 bin/ 文件夹中。
这是解决方案的基本结构(它包含比我在下面列出的更多的项目)
Solution
|--Gui 1 Project
| |--References
| | |--ClassLibrary
|--Gui 2 Project
| |--References
| | |--ClassLibrary
|--Main Gui Project (StartUp Project)
| |--References
| | |--Gui 1 Project
| | |--Gui 2 Project
| | |--ClassLibrary
| |--Datafile.wav (Build Action: Content, Copy-if-newer)
| |--Mods.xml (Build Action: Content, Copy-if-newer)
| |--VariousSourceFiles.cs
|--ClassLibrary
| |--Resources
| | |--Elements.xml (Build Action: Content, Copy-if-newer)
| | |--AminoAcids.xml (Build Action: Content, Copy-if-newer)
| |--VariousSourceFiles.cs
Main Gui 项目是该程序的 StartUp 项目,是一个简单的 MDI 容器,可在其中启动其他 GUI 应用程序。当我在我的开发机器上以调试/发布模式构建时,一切都按预期工作。编译 GUI 程序,将 Datafile.wav 和 Mods.xml 文件复制到 bin/ 文件夹,并将 Elements.xml 和 AminoAcids.xml 文件复制到 bin/Resources/ 文件夹。该程序按预期运行,没有打嗝。
这就是问题开始的地方,我使用 VS2010 中的 Click-Once 发布功能在内部将程序发布给我们服务器上的同事。他们能够很好地安装程序,甚至启动它。但是,一旦他们单击使用其中一个资源文件(Elements.xml 或 AminoAcids.xml)的按钮,就会引发无法找到该文件的异常。其他两个内容文件(Datafile.wav 和 Mods.xml)不会发生这种情况,换句话说,它们被正确复制到最终目录。
所以我去 Main Gui Project -> Properties -> Publish -> Application Files.. 我看到 Datafile.wav 和 Mods.xml 包含在这个列表中。但是,其他两个内容文件(Elements.xml 和 AminoAcids.xml)不是。我相信这是问题所在,因为当我将程序发布到我们的服务器时,它不知道将资源复制过来。我如何通知 ClickOnce 他们需要包含这些文件?ClassLibrary.dll 显示在此列表中,但没有任何 .xml 文件。
然后我尝试转到 ClassLibrary -> Properties -> Publish,但没有 Publish 选项卡,因为它是一个类库。所以我无法指定我希望将这两个资源文件复制到任何客户端计算机上的最终 bin/Resources 文件中。有谁知道如何克服这个问题?
我想将资源文件 (.xml) 保留为 Build Action: Content 而不是 Embedded Resources,因为程序的用户可能会更改/更新/扩展文件的内容。