天天看點

代碼修改之後MSbuild編譯不出最新的dll解決方法

問題:

使用jenkins釋出的時候,開發不斷回報自己修改的檔案使用jenkins沒有釋出到測試環境。經過查證發現使用MSBUILD編譯的時出現修改的檔案編譯出的日期不是最新日期,但是使用VS編譯就不會出現此問題。

解決方案:

在Project裡面添加元素:添加InitialTargets="Clean;Compile"之後解決。

我了解是初始目标(InitialTargets)需要進行清理(Clean),編譯(Compile),類似在手動解決方案裡面右擊滑鼠進行:清理(Clean),編譯(Compile)。也就是使用代碼代替手動操作的第一步。

對我有啟示的文章:

https://technet.microsoft.com/zh-cn/ms171463

VS生成的各種方法及定義:

-- 選擇“生成”或“生成解決方案”,将隻編譯自上次生成以來更改過的那些項目檔案群組件。

注意

如果解決方案中包括多個項目,則“生成”指令将變成“生成解決方案”。

選擇“重新生成解決方案”,将首先“清理”解決方案,然後生成所有項目檔案群組件。

選擇“清了解決方案”将删除所有中間檔案和輸出檔案,隻留下項目檔案群組件檔案,以後可以從這些檔案生成中間檔案和輸出檔案的新執行個體。

使用msbuild編譯源代碼腳本描述

注意:Release與Debug模式生成檔案大小不一樣。Debug(除錯)不是Debuge(調試器)。Release意思:釋放;釋出;發行;放開。

指令行:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild "D:\JenkinsRelease\Agency\HK\HK-Centa-Agency-Web-SIM\Script\wcf.msbuild" /p:Environment=Production 

 wcf.msbuild腳本描述

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" InitialTargets="Clean;Compile">

<ItemGroup>

<BuildArtifactsDir Include="..\Release\wcf\\" />

<SolutionFile Include="D:\jenkins\workspace\HK-Centa-Agency-Web-SIM\sourcecode\Centa.Agency.Service\Centa.Agency.Service.sln" />

<BuildBinDir Include="D:\jenkins\workspace\HK-Centa-Agency-Web-SIM\sourcecode\Centa.Agency.Service\Bin\\" />

</ItemGroup>

<PropertyGroup>

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

<BuildPlatform Condition=" '$(BuildPlatform)' == '' ">Any CPU</BuildPlatform>

</PropertyGroup>

<Target Name="Compile" DependsOnTargets="Init">

<MSBuild Projects="@(SolutionFile)" Targets="Rebuild"

Properties="OutDir=%(BuildArtifactsDir.FullPath);

Configuration=$(Configuration);

Platform=$(BuildPlatform)" />

</Target>

<Target Name="Init" DependsOnTargets="Clean">

<MakeDir Directories="@(BuildArtifactsDir)" />

<MakeDir Directories="@(BuildBinDir)" />

<Target Name="Clean">

<RemoveDir Directories="@(BuildArtifactsDir)" />

<RemoveDir Directories="@(BuildBinDir)" />

</Project>