在ClickOnce部署期间,类库中定义的内容不会传输

Moo*_*oop 5 c# clickonce visual-studio-2010 winforms

我有一个使用ClickOnce部署的WinForms,C#解决方案,这会导致资源文件出现问题.简而言之,在使用ClickOnce部署后,类库项目中标记为Content的文件不会被复制到输出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
Run Code Online (Sandbox Code Playgroud)

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,因为程序的用户可能会更改/更新/扩展文件的内容.

Sco*_*lie 2

我知道这不太漂亮,但它会完成工作。Microsoft 有一篇文章向您展示了如何在发布后将数据文件添加到 Click Once 部署中。您可以相当轻松地自动化这些步骤

\n\n

该文章的链接为:\n http://msdn.microsoft.com/en-us/library/6fehc36e(v=vs.110).aspx

\n\n

以下是链接更改时的步骤:\n使用 Mage.exe 包含数据文件

\n\n

1.\n将数据文件与应用程序的其余文件一起添加到应用程序目录中。

\n\n

通常,您的应用程序目录将是标有部署的当前版本\xe2\x80\x94 的目录,例如 v1.0.0.0。

\n\n

2.\n更新您的应用程序清单以列出数据文件。

\n\n

mage -u v1.0.0.0\\Application.manifest -FromDirectory v1.0.0.0

\n\n

执行此任务会在应用程序清单中重新创建文件列表,并自动生成哈希签名。

\n\n

3.\n在您首选的文本或 XML 编辑器中打开应用程序清单,然后找到最近添加的文件的文件元素。

\n\n

如果添加了名为 Data.xml 的 XML 文件,该文件将类似于以下代码示例。

\n\n
<file name="Data.xml" hash="23454C18A2DC1D23E5B391FEE299B1F235067C59" hashalg="SHA1" asmv2:size="39500" /> \n
Run Code Online (Sandbox Code Playgroud)\n\n

1.\n将属性类型添加到此元素,并为其提供数据值。

\n\n
<file name="Data.xml" writeableType="applicationData" hash="23454C18A2DC1D23E5B391FEE299B1F235067C59" hashalg="SHA1" asmv2:size="39500" /> \n
Run Code Online (Sandbox Code Playgroud)\n\n

1.\n使用密钥对或证书重新签署您的应用程序清单,然后重新签署您的部署清单。

\n\n

您必须重新签署部署清单,因为应用程序清单的哈希值已更改。

\n\n

mage -s 应用程序清单 -cf cert_file -pwd 密码

\n\n

mage -u 部署清单 -appm 应用清单

\n\n

mage -s 部署清单 -cf certfile -pwd 密码

\n