使用msbuild从Web站点部署中排除文件

8
我有一个网站项目,使用msbuild进行部署。在该项目中,有一些文件和文件夹需要进行构建(例如Web.config部分替换文件),但我不希望将它们部署到目标站点。
最好的解决方法是通过后置构建目标来删除这些文件,但我想知道是否有一种方法可以使这些文件不被复制到输出文件夹中。
5个回答

8

您好,查看此博客文章可以帮助您解决问题。

我正在尝试在发布时排除未压缩的JavaScript文件,并仅使用压缩版本(我正在删除大型JavaScript和chirp.config),这只是用于调试。

按照链接中的说明将以下内容放入项目文件即可。

<ItemGroup>
    <ExcludeFromPackageFolders Include="Scripts\large">
      <FromTarget>Project</FromTarget>
    </ExcludeFromPackageFolders> 


    <ExcludeFromPackageFiles Include="Scripts\mash.js.chirp.config" />  
    <ExcludeFromPackageFiles Include="Content\mash.js.chirp.config" />
  </ItemGroup>

发布的站点将不包括以下内容:

  • 脚本\large
  • mash.js.chirp.config

7
您可以选择文件并将它们的“生成操作”设置为“ExcludeFromPackageFiles”。这样,Visual Studio就会编辑csproj xml,您就不必手动编辑了。

我的Visual Studio 2012有很多选项,但没有“ExcludeFromPackageFiles”。 - Pete Alvin
就像Pete所说的那样,这不是一个选项。而且如果你正在编译文件,例如BuildAction是TypeScriptCompile,我真的无法更改它。 - Brunis

3
您可以使用Web发布管道中的MSDeploy来排除要包含在包创建中的文件。 如果您想从部署的软件包中排除例如App_Data文件夹,可以使用以下内容:
<Target Name="ExcludeApp_Data" DependsOnTarget="$(ExcludeApp_DataDependsOn)" Condition="$(ExcludeApp_Data)" > 
  <ItemGroup>
    <ExcludeFromPackageFolders Include="App_Data">
      <FromTarget>ExcludeApp_Data</FromTarget>
    </ExcludeFromPackageFolders>
  </ItemGroup>
</Target>

在某些情况下,编辑器无法正确显示代码。当您配置“Package/Publish Web”时,上述内容会在proj文件中生成。您可以添加自己的目标来完成此操作。

例如,如果您想从构建中排除Scripts\jquery文件,请创建一个名为ExcludeScriptFiles.wpp.targets的单独文件,如下所示:

<ItemGroup> 
  <ExcludeFromPackageFolders Include="Internal">
    <FromTarget>ExcludeScriptFiles.wpp.targets</FromTarget>         
  </ExcludeFromPackageFolders>
  <ExcludeFromPackageFiles Include="Scripts\jquery.js;xyz.js">
    <FromTarget>ExcludeScriptFiles.wpp.targets </FromTarget> 
  </ExcludeFromPackageFiles>
</ItemGroup>

这只是一个编写自己目标的简单示例。希望这能有所帮助。

谢谢你的提示,我会尽快尝试。回答你(现在已编辑掉的)的问题,你可以在SO中正确格式化XML,只需将其分布在多行即可。 - Paolo Tedesco
@Paolo 感谢您的格式化提示。当我尝试跨多行分发时,按回车后格式化并没有生效。我有什么遗漏吗?我目前正在执行一个任务,即一次性为不同环境(测试/阶段/生产)生成配置文件并创建部署包。 - DotNetInfo

3
在文件的属性资源管理器中,将选项“复制到输出目录”更改为“不复制”。

enter image description here


这是一个网站项目,而不是一个网页应用程序。我需要一种方法来从msbuild文件中实现这个功能。 - Paolo Tedesco

0

我使用Visual Studio 2012和Jenkins,唯一对我有效的方法是将“Build Action”更改为“None”:

enter image description here

在内部,这将把PROJECT.csproj文件中的XML标签从“Content”设置为“None”:

<None Include="form.coffee" />

我关闭了项目,然后使用另一个编辑器手动编辑文件,以排除所有我的咖啡文件集体

(所有我的咖啡文件仍然被转译为js文件。)


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