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

<Target Name="Clean">
<RemoveDir Directories="@(BuildArtifactsDir)" />
<RemoveDir Directories="@(BuildBinDir)" />
</Target>

</Project>

posted @ 2018-12-04 12:10  红萝卜  阅读(734)  评论(0编辑  收藏  举报