限制条件如下: 使用Visual Studio 2017。 最终需要从调用MSBuild的PowerShell脚本中调用。
不确定是否相关,但需要能够构建以下内容:
- asp.net 461
- asp.net-core 1.1和2.0程序集
到目前为止尝试无果:
- 如何在Visual Studio中实现自动递增版本号? <- 仅在从VS构建时有效。
- 构建过程中的代码生成 - Microsoft关于使用“TextTemplating”和MSBuild的最新文档。指出需要将某些DLL复制到构建服务器上...文件未在文档指定位置找到,也不知道要将它们复制到哪里,我已经找到了所有文件。此外,修改了
.csproj
导入Microsoft.TextTemplating.targets
路径以修正位置,但运行MSBuild时出现"error MSB4018:TransformTemplates任务意外失败。" - 这个SO答案 - Visual Studio 2017 RTM中T4模板的MSBuild支持 <- 与上述相同的MSBuild运行时错误。
尝试示例 "构建过程中的代码生成",在VS构建过程中可用但不适用于MSBuild:
放置在项目根目录下的 handleVersioning.tt 文件:
<#@ template language="C#" #>
using System.Reflection;
[assembly: AssemblyVersion("1.0.0.*")]
[assembly: AssemblyFileVersion("<#= this.Year #>.<#= this.Month #>.<#= this.Day #>.<#= this.Minute #>")]
<#+
int Year = DateTime.UtcNow.Year;
int Month = DateTime.UtcNow.Month;
int Day = DateTime.UtcNow.Day;
int Minute = unchecked((int)DateTime.UtcNow.TimeOfDay.TotalMinutes);
#>
.csproj:
<Import Project="...hardcoded...\Microsoft.CSharp.targets" />
<!-- This is the important line: -->
<Import Project="...hardcoded...\TextTemplating\Microsoft.TextTemplating.targets" />
<PropertyGroup>
<TransformOnBuild>true</TransformOnBuild>
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
<TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>
调用方式如下:
msbuild myProject.csproj /t:TransformAll
msbuild /p:Version=1.2.3.4
将设置程序集版本,我建议基于sdk-based projects的现有源代码为传统项目创建“polyfill targets”。现在没有时间做,但也许在接下来的几天里可以完成。然后就会像 https://dev59.com/ElgQ5IYBdhLWcg3wIAWb 一样运行。 - Martin UllrichC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
- 我稍后会将我的解决方案作为答案提供。对于.Net 461
和.Net Core
,它们是不同的,我现在已经迁移到了只用.Net Core
。 - ttugates/p:Version=1.2.3.4
运行msbuild
时,版本仍然保持不变。我还在寻找我做错了什么。T4 - 是的,它工作得很好,但每次我需要重新保存这个文件。 - Zam