MSBuild目标_CopyWebApplication不会将所有必需的文件复制到bin文件夹

时间:2010-04-07 16:05:36

标签: msbuild publish target

在Web上的其他地方,您可以找到使用类似内容的建议,从命令行模拟VS 2005-2008 IDE中的发布功能(我希望我没有搞砸语法!):

msbuild /t:ResolveReferences;_CopyWebApplication /p:BuildingProject=true;OutDir=C:\inetpub\wwwroot\ blah.csproj

现在,看起来.dll的副本很好。但是,有一些配置文件和模板文件被复制到bin文件夹,这是应用程序工作所需的。例如,NHibernate配置文件在blah.csproj中显示为:

<None Include="blah.cfg.xml">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>

虽然在IDE中使用Publish会按原样复制此文件,但前面提到的_CopyWebApplication目标却没有。我需要在构建脚本中复制此文件。这是_CopyWebApplication的理想行为吗?关于如何解决这个问题的任何建议?

EDIT 4/21/2010:

让我澄清一下,我们对VS 2005和VS 2008项目的限制(目前),以及我们的构建脚本是为MSBuild 3.x编写的。我们尚未准备好转向VS 2010。

我还要指出,我们正在寻找可在命令行中使用的解决方案,以便我们可以自动执行类似发布的命令以及自定义构建选项,并可能在未来自动部署。

3 个答案:

答案 0 :(得分:6)

这只是一种解决方法。

在用于发布网站的构建脚本中,在Web项目本身上运行MSBuild以发布它之后(Targets =“ResolveReferences; _CopyWebApplication”),我添加了一个复制操作:

<Copy SourceFiles="@(ProjectBinFiles)" DestinationFolder="$(StageBin)\%(ProjectBinFiles.RecursiveDir)" />

其中ProjectBinFiles是表示源目录中bin目录中的文件的Item,StageBin是表示发布站点目录中bin文件夹的Property。到目前为止,似乎有效。

答案 1 :(得分:0)

我也有类似的问题。我认为答案是使用MSDeploy。现在调查它,但可能提供所需的功能......

答案 2 :(得分:0)

我在VS 2012中遇到了同样的问题,并最终通过对需要复制的任何文件执行以下操作来修复它:

  • 将“复制到输出文件”属性设置为“如果更新则复制
  • 将Build Action文件属性设置为Content(如果需要编译文件,则编译)