在發佈asp.net站點和windows服務項目時,有的時候這樣的需求:msbuild編譯之後發佈到伺服器指定目錄時要排除指定文件,比如通過jenkins構建時,不希望覆蓋原來的Web.config和App.config,那麼該如何排除呢? web站點項目 比如不希望發佈Web.config文件,有 ...
在發佈asp.net站點和windows服務項目時,有的時候這樣的需求:msbuild編譯之後發佈到伺服器指定目錄時要排除指定文件,比如通過jenkins構建時,不希望覆蓋原來的Web.config和App.config,那麼該如何排除呢?
web站點項目
比如不希望發佈Web.config文件,有以下三種方法。
1,將項Content改為None
修改前:
1 <Content Include="Web.config" />
修改後:
1 <None Include="Web.config" />
2,使用項的Exclude屬性
如下代碼:
1 <Content Include="Web.config" Exclude="Web.config" />
註意:
這種方式雖然可以實現發佈時排除,但是同時也從項目中排除了,對於本地開發調試不方便。
3,使用Target和ExcludeFromPackageFiles
添加新的Target節點,如下代碼:

1 <!--通過ExcludeFromPackageFiles排除Web.config--> 2 <Target Name="CustomExcludeFiles" BeforeTargets="ExcludeFilesFromPackage"> 3 <ItemGroup> 4 <ExcludeFromPackageFiles Include="Web.config"></ExcludeFromPackageFiles> 5 </ItemGroup> 6 </Target>View Code
總結:最佳實踐是使用方法3,既可以實現發佈時排除,又能保證文件存在於項目中,不影響本地開發和調試。
另外:
由於msbuild基於.csproj項目文件,所以以上操作都是修改.csproj文件,修改方法如下:
1,卸載項目
如下圖:
2,編輯csproj文件
如下圖:
windows服務項目
由於在windows服務項目中,App.config本來就是None類型的,且使用Target和ExcludeFromPackageFiles的方式不適用,所以暫時使用項的Exclude屬性實現。
修改前:
1 <None Include="App.config" />
修改後:
1 <None Include="App.config" Exclude="App.config" />
參考資料
1,https://stackoverflow.com/questions/6358635/exclude-files-from-web-site-deployment-with-msbuild
2,msbuild參考:https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild