如何在构建时将其他文件包含到 C# 的输出目录中?

Posted

技术标签:

【中文标题】如何在构建时将其他文件包含到 C# 的输出目录中?【英文标题】:How to include other files to the output directory in C# upon build? 【发布时间】:2013-05-23 00:43:10 【问题描述】:

我的应用程序需要一些库文件才能运行。 我的应用程序包含设置和部署。

我已经知道,为了在安装时将库文件添加到应用程序的输出目录中,我只需要在构建之前在 .NET IDE 中引用这些库...唯一的问题是这些库无法引用...所以我需要能够将这些库复制到我的应用程序的安装目录...目前,我正在手动复制这些库...

附录

我也尝试将这些库文件作为现有项目添加到我的项目中,并标记每个库文件的复制到输出目录Copy if newer 在他们的属性上,但仍然没有得到我想要的解决方案。

更新 1

感谢您的帮助,它帮助我解决了我的问题,我设法使您发布的解决方案工作除了一个...@Matthew Watson 的帖子.. 我什至也设法找到了解决方案,所以我想分享它也和你一起。

这就是我所做的:

    我在我的应用程序中打开了设置和部署项目。 在应用程序文件夹树的右侧,我右键单击了.. 然后点击添加.. 然后点击文件 然后浏览到我想添加到安装目录的文件 然后点击打开。

但出于好奇...我仍在努力使@Matthew Watson 发布的内容发挥作用...希望您能帮助我解决这个问题。提前致谢

更新 2

我昨天忘记更新这篇文章了,我昨天已经设法让 Matthew Watson 的解决方案工作了。再次感谢大家的帮助。

【问题讨论】:

使用 PostBuild 事件并创建一个 *.bat 或 *.cmd 来自动完成。 为什么“复制到输出目录”选项没有提供您想要的解决方案? 为什么不能被引用? @GeraldVersluis 'Copy to Output Directory' 实际上有效,但它只复制 Debug 或 Release 文件夹中的文件。当我运行安装程序时,我需要的库文件在安装过程中不知何故不包含在安装目录中...... 那你应该可以配置各种可以复制到安装文件夹的文件了吧?看一下这个;虽然这是一篇旧文章,但我认为实现并没有太大变化。 simple-talk.com/dotnet/visual-studio/… 【参考方案1】:

您可以将文件添加到您的项目并选择它们的属性:"Build Action" as "Content""Copy to output directory" as "Copy Always"Copy if Newer(后者更可取,因为否则每次构建项目时项目都会完全重建)。

然后这些文件将被复制到您的输出文件夹中。

这比使用后期构建步骤要好,因为 Visual Studio 会知道文件是项目的一部分。 (这会影响 ClickOnce 应用程序等需要知道将哪些文件添加到 clickonce 数据的应用程序。)

您还可以更轻松地查看项目中有哪些文件,因为它们将与源代码文件一起列出,而不是在构建后的步骤中隐藏。而且源代码管理可以更轻松地与它们一起使用。

将“内容”文件添加到项目后,您将能够将它们添加到 Visual Studio 2010 安装和部署项目,如下所示:

进入您的安装项目并将名为"Content Files" 的项目输出添加到您的"Application Folder" 输出。如果您在添加内容文件后右键单击它们,您可以选择“输出”并查看它要复制的内容。

请注意,Visual Studio 2012 不支持安装和部署项目。

【讨论】:

我只是按照你说的做了,但是库文件仍然不会被复制到安装目录中......这里有没有我遗漏的步骤? @chad 哦,我明白了,这是 安装程序 的问题。您是如何创建安装程序的? 好吧,关于我的项目。我通常以这种方式添加设置和部署项目:单击文件>添加>新建项目然后,我选择设置项目之后,设置项目将启动。我将右键单击应用程序文件夹,然后单击添加,然后单击项目输出... @Chad 这应该可以工作 - 只要您已将现有文件添加到项目并将构建操作设置为“内容”,如果您添加“内容文件”项目,安装程序应该会选择它输出组到安装项目中的应用程序文件夹。也许您将不得不重新制作您的安装程序项目。我发现它们真的很像那样(我们不再使用它,因为 VS2012 不支持它 - 我们现在改用 WiX) @Chad 其实我想我知道你错过了哪一步——你需要进入你的安装项目并将名为“内容文件”的项目输出添加到“应用程序文件夹”输出中。如果您在添加内容文件后右键单击它们,您可以选择“输出”并查看将要复制的内容。【参考方案2】:

您可以使用Visual Studio Post Build Event - Copy to Relative Directory Location。基本上是在构建指定项目时执行的脚本。

因此您可以使用它来复制您需要的二进制文件,实际运行您的应用程序之前。

【讨论】:

感谢您的快速响应,我现在会尝试研究如何使用该方法 @chad:没什么特别的,它只是平面“旧”批处理脚本,您可以在构建时运行。

以上是关于如何在构建时将其他文件包含到 C# 的输出目录中?的主要内容,如果未能解决你的问题,请参考以下文章

在构建时将 C++ 结构转换为 C# 结构

如何将 .exe 从 C++ 项目复制到 C# 项目的输出目录?

如何在使用“delims =”作为扩展列表时将搜索目录包含到 FOR-DO 循环中

将整个目录复制到输出文件夹,维护文件夹结构?

构建时将文件复制到 Xcode 项目的根目录

C# directshow 连接多个图