如何在Visual Studio中设置给定资源文件的目标输出路径

6
在我的VS解决方案的主项目中,我有一个资源文件夹,其中包含一些必需的外部工具。在构建和发布解决方案时,我会得到一个.\Resources*文件夹,其中包含所有所需的文件。到目前为止还不错。
然而,我需要将某些文件移动到父文件夹中。我的第一次尝试是使用后置生成事件来完成。它可以按照正确的路径移动它们。然而,在发布输出中,它们仍然出现在资源文件夹中,而我需要它们出现在上级文件夹中 :/
有没有办法在Visual Studio中设置资源的目标输出路径?

如果它们本来就属于父文件夹,为什么不一开始就把它们放在那里呢? - John Saunders
主应用程序使用多个 .exe 文件(通过新进程创建+启动),我不希望它们与代码混在一起。 - Bruno
另一方面,如果我更改它们的路径,每个使用它的用户都必须正确设置其路径,而现在这不是一个选项.. 这就是为什么我不得不将它们发布在根文件夹中:/ - Bruno
3个回答

1

经过一些研究和实验,我解决了我的问题。不过,在这个过程中我也学到了一些东西。

第一次尝试是将文件添加到项目根目录并标记为资源。在发布后它能正常工作。但是把这些文件放在项目根目录下有点不够好。

由于我需要一些在另一个VS解决方案中编译的*.exe文件,所以将它们作为项目引用添加进来。试了一下,通过了“发布”测试。但这仍然不是最好的方法。

之后,通过一些脚本和后构建事件,我将所需的文件复制到正确的文件夹中。它能正常工作,但在发布后,这些文件并不会出现在包中。

然而,使用Mage工具仍然有可能解决这个问题:

http://msdn.microsoft.com/en-us/library/acz3y3te.aspx

这导致了一些有前途的实验,但最终帮助我意识到 MS ClickOnce 的局限性,因此我决定尝试其他工具。
以下是一个好的起点: ClickOnce 有哪些替代品?

0

我曾经遇到过类似的情况。在 Visual Studio 中自定义输出路径等方面,会比它本身提供的功能更麻烦。

最终,我选择让 Visual Studio 自己处理文件/项目结构,并编写了一个后期构建脚本,将所有需要的内容复制到最终的“发布准备”目录中。

然后,我将执行目标设置为新位置,这样我就可以像平常一样运行/调试,但是使用的是按我需要组织的新文件夹。请注意,我认为这是一个用户项目设置;因此,如果其他开发人员也想这样做,他们也需要在自己的机器上进行设置。

我记得更改了一些输出路径等内容,以使后期构建脚本更简单。但是更改这些内容可能会导致添加新项目到解决方案时出现问题;您可能需要对其进行配置以匹配。这是一个权衡的问题 :)


0

两个想法:

  • 也许您可以将资源移动到另一个项目中 - 一个专门用于资源的项目 - 然后将它们的Build Action设置为Content,并将Copy To Output设置为true。然后引用这个新项目并构建解决方案。(这可能不会按照您的意愿工作,只是一个想法)。
  • 为什么不将您的资源作为嵌入式资源。将它们全部保留在Resources\目录中,并通过编程方式访问它们?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接