使用clickonce在c#解决方案中部署外部文件

我在使用Visual Studio Express 2010 c#版时遇到了问题。 我有一个引用DLL的项目。 此DLL有一个外部Excel文件,标记为Build Action = Content Copy to Output Directory = Copy Always

构建解决方案时,此Excel文件已正确复制到BIN \ release解决方案文件夹中。

但是,如果我尝试使用“发布”向导部署相同的解决方案,则不会在安装目录中复制Excel文件。

拜托,有人可以帮帮我吗?

您是说Excel文件仅由您在项目中包含的dll引用? 这是辅助参考,ClickOnce将不会看到它并自动包含该文件。

首先,在你的dll上,我假设你的项目直接引用它。 如果是这样,那么请确保已将其添加到项目中并将Build Action设置为“none”并将“copy to output directory”设置为“do not copy”。 然后删除对它的引用并重新添加它,指向它现在包含在项目中的版本。 将“copy local”属性设置为“true”。 这将确保dll本身正确部署。

对于Excel文件,您将不得不将其添加到项目中。 将构建操作设置为“内容”,并将“复制到输出目录”设置为“始终复制”。 它不会自动包含,因为它是ClickOnce应用程序的辅助引用,而不是像dll那样的直接/主要引用。

打开ClickOnce项目的“ 发布”属性 。 然后单击“应用程序文件…”按钮。 这将启动一个对话框,您可以在其中控制发布包中包含的文件。

为了使您的XLSX文件(或任何其他非构建文件)出现在该对话框中,您需要在属性窗口的“构建操作”中将其标记为“内容”

尝试将此文件包含在解决方案中并将“复制到输出目录”设置为“始终复制”

您的文件似乎未列在“PublishFiles”列表中。 打开“项目属性”,转到“发布”选项卡,单击“应用程序文件”按钮,确保在“发布状态”为“包含”的文件列表中看到DLL文件。

您可以通过将Excel文件作为资源插入来避免此问题,然后将其写为:

File.WriteAllBytes(DestinationFileName, Properties.Resources.MyResourceFile); 

我假设Excel文件是您用来构建输出文件的某种模板。