Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类库中定义的内容不';ClickOnce部署期间无法传输_C#_Winforms_Visual Studio 2010_Clickonce - Fatal编程技术网

C# 类库中定义的内容不';ClickOnce部署期间无法传输

C# 类库中定义的内容不';ClickOnce部署期间无法传输,c#,winforms,visual-studio-2010,clickonce,C#,Winforms,Visual Studio 2010,Clickonce,我有一个WinForms C#解决方案,它使用ClickOnce部署,这会给资源文件带来一些麻烦。简言之,使用ClickOnce部署后,在类库项目中标记为内容的文件不会复制到输出bin/文件夹 这是解决方案的基本结构(它包含比我下面列出的项目多得多的项目) 主Gui项目是该程序的启动项目,是一个简单的MDI容器,用于启动其中的其他Gui应用程序。当我在我的开发机器上以调试/发布模式构建时,一切都按预期进行。编译GUI程序,将Datafile.wav和Mods.xml文件复制到bin/文件夹,将E

我有一个WinForms C#解决方案,它使用ClickOnce部署,这会给资源文件带来一些麻烦。简言之,使用ClickOnce部署后,在类库项目中标记为内容的文件不会复制到输出bin/文件夹

这是解决方案的基本结构(它包含比我下面列出的项目多得多的项目)

主Gui项目是该程序的启动项目,是一个简单的MDI容器,用于启动其中的其他Gui应用程序。当我在我的开发机器上以调试/发布模式构建时,一切都按预期进行。编译GUI程序,将Datafile.wav和Mods.xml文件复制到bin/文件夹,将Elements.xml和aminoacies.xml文件复制到bin/资源/文件夹。程序按预期运行,没有打嗝

问题就从这里开始,我使用VS2010中的单击一次发布功能在服务器内部向我的同事发布程序。他们可以很好地安装程序,甚至可以启动它。但是,只要他们单击使用其中一个资源文件(Elements.xml或aminoacies.xml)的按钮,就会抛出一个异常,即无法找到该文件。其他两个内容文件(Datafile.wav和Mods.xml)不会发生这种情况,换句话说,它们会正确复制到最终目录

所以我转到主Gui项目->属性->发布->应用程序文件。。我看到Datafile.wav和Mods.xml包含在这个列表中。但是,其他两个内容文件(Elements.xml和aminoacies.xml)不是。我相信这就是问题所在,因为当我将程序发布到我们的服务器时,它不知道如何复制资源。我如何通知ClickOnce他们需要包含这些文件?ClassLibrary.dll显示在此列表中,但没有.xml文件

然后我尝试转到ClassLibrary->Properties->Publish,但因为它是一个类库,所以没有用于发布的选项卡。因此,我无法指定要将这两个资源文件复制到任何客户端计算机上的最终bin/Resources文件。有人知道如何克服这个问题吗


我希望将资源文件(.xml)保留为构建操作:内容,而不是嵌入的资源,因为程序用户可能会更改/更新/扩展文件的内容。

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

文章的链接是:

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

一,。 将数据文件与应用程序的其余文件一起添加到应用程序目录

通常,应用程序目录将是一个标有部署当前版本(例如v1.0.0.0)的目录

二,。 更新应用程序清单以列出数据文件

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

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

三,。 在首选文本或XML编辑器中打开应用程序清单,并找到最近添加的文件的file元素

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

<file name="Data.xml" hash="23454C18A2DC1D23E5B391FEE299B1F235067C59" hashalg="SHA1" asmv2:size="39500" /> 

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

<file name="Data.xml" writeableType="applicationData" hash="23454C18A2DC1D23E5B391FEE299B1F235067C59" hashalg="SHA1" asmv2:size="39500" /> 

一,。 使用密钥对或证书重新签署应用程序清单,然后重新签署部署清单

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

mage-s应用程序清单-cf证书文件-pwd密码

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

mage-s部署清单-cf certfile-pwd密码这似乎更简单

  • 在需要数据文件的类库项目目录中,找到该数据文件
  • 在类库项目中,转到“项目属性”选项卡,单击“生成事件”选项卡,更新生成后事件命令行,并使用“复制”或“xcopy”添加脚本代码,以相对于将类库文件用作依赖项的可执行程序集复制数据文件,如项目引用所示,项目的文件夹
  • 在可执行程序集的项目中,将复制的文件设置为包含“生成操作”“内容”和“复制到输出目录”“始终复制”属性的文件
  • 在可执行程序集项目属性的“转到发布”选项卡中,单击“应用程序文件…”按钮。确保选中“显示所有文件”。查找数据文件,确保“发布状态”为“包含”,下载组为“必需”
  • ClickOnce将使用类库部署数据文件,类库代码将能够在运行时找到数据文件


    如果我在某个地方错了,请纠正我。

    我希望有一天能回答这个问题。。。我在VisualStudio2005中遇到了类似的问题,无法将XSD文件包含到ClickOnce部署模式中,请等待您的响应。我测试了一下,它成功了。尽管这不是最简单的解决方案,但已经足够了。
    <file name="Data.xml" writeableType="applicationData" hash="23454C18A2DC1D23E5B391FEE299B1F235067C59" hashalg="SHA1" asmv2:size="39500" />