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

apo*_*217 13 msbuild publish target

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

msbuild /t:ResolveReferences;_CopyWebApplication /p:BuildingProject=true;OutDir=C:\inetpub\wwwroot\ blah.csproj
Run Code Online (Sandbox Code Playgroud)

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

<None Include="blah.cfg.xml">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Run Code Online (Sandbox Code Playgroud)

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

编辑4/21/2010:

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

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

apo*_*217 6

这只是一种解决方法.

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

<Copy SourceFiles="@(ProjectBinFiles)" DestinationFolder="$(StageBin)\%(ProjectBinFiles.RecursiveDir)" />
Run Code Online (Sandbox Code Playgroud)

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

  • 你必须定义"ProjectBinFiles","StageBin"变量吗?我需要尝试这个,但不确定在我的任务中在哪里实现这个? (2认同)