天天看点

代码修改之后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>