如何强制MSBuild复制项目中的空文件夹?

5

我在Visual Studio 2012中有一个MVC 4项目。其中包含一个Logs文件夹,里面只有四个空的子文件夹。这个结构是我使用的一个库所需的。我通过以下方式将这些文件夹包含到项目中:

<ItemGroup>
    <Folder Include="App_Data\" />
    <Folder Include="XSockets\XSocketServerPlugins\Log\XConnectionInterceptor\" />
    <Folder Include="XSockets\XSocketServerPlugins\Log\XErrorInterceptor\" />
    <Folder Include="XSockets\XSocketServerPlugins\Log\XHandshakeInterceptor\" />
    <Folder Include="XSockets\XSocketServerPlugins\Log\XMessageInterceptor\" />
</ItemGroup>

但这还不够,所有这些文件夹(包括Visual Studio创建项目时存在的App_Data文件夹)都没有复制到软件包中。我是否可以强制MSBuild将它们复制过去,即使它们是空的?


1
你可以在每个文件夹中放置一个虚拟的空文件。这样做可能不是很“纯粹”,但它应该能够工作,并且实现起来很快。 - Damien_The_Unbeliever
我考虑过这个问题,但我希望有更好、更干净的解决方案。 - Episodex
现在我知道我问了错误的问题。尽管下面的答案适用于构建,但它们对我不起作用,因为我正在使用WebDeploy,而文件夹没有复制到包中。唯一的方法(也是MS推荐的方法)是像@Damien_The_Unbeliever所写的那样放置虚拟文件。 - Episodex
2个回答

4

添加一个PostBuild步骤来复制文件夹。

我不能具体回答VS2012的问题,但以下是在VS2010中执行此操作的方法:

  • 右键单击项目,选择属性
  • 显示生成事件选项卡
  • 将您的复制命令放在后生成事件命令中

如果单击编辑按钮,弹出对话框将有一个宏按钮,列出了所有可用的VS变量,可避免使用显式路径等。

在VS2010中,这将修改项目文件,使其看起来像这样:


  <PropertyGroup>
    <PostBuildEvent>copy /Y "$(TargetDir)\*.*" "$(ProjectDir)\..\..\..\net40"</PostBuildEvent>
  </PropertyGroup>

我正在使用普通的VS项目,而不是MSBuild脚本。我应该编辑项目文件以添加这个吗?你能提供一个在项目文件中实现这个的例子吗?我对构建脚本还很陌生。 - Episodex

3
请勿编辑项目文件。 我看到您正在使用较旧版本的XSockets,对吗?
按照Brenda的建议办事,不要在意项目文件。 看一下附加的图片... build events 不能百分之百确定这是否是您要找的,但它显示了预构建事件和后构建事件。
祝好 Uffe,XSockets团队

谢谢!那应该可以,我星期一会检查一下。你为什么认为我在使用旧版本?我是通过nuGet将XSockets 2安装到我的MVC 4应用程序中的。也许我做错了什么? - Episodex
哦,那就好了!是我自己的问题 :) 我以为你有一些配置文件(我们在之前的版本中使用过)。如果你遇到任何问题,请随时联系我/我们,我们会尽力帮助你! - Uffe
可能很快我会联系您,当我整理好并重新思考问题时,会有一些问题需要问您:)。感谢您在XSockets上的出色工作!至于问题,我已经添加了评论,说明为什么这些解决方案对我无效,但它们对我提出的问题是正确的。 - Episodex
您随时都可以联系我们。发送邮件至contact[at]xsockets[dot]net将会把信息发送给团队中的所有成员! - Uffe

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