MSBuild:构建 DefineConstants 值
我注意到扩展了我的csproj文件的DefineConstants属性的当前值,我想添加为后缀的字符串可以通过以下方式在C#上计算:Int32 min_year = 2009;。Int32 target_year = 2015; 。
String result = String.Join(“;”, Enumerable.Range(min_year, target_year -。
min_year + 1),Select(n=>“NEWER_THAN_AUTOCAD_” + (n - 1)),ToArray());。
结果: 。
NEWER_THAN_AUTOCAD_2008;NEWER_THAN_AUTOCAD_2009;。
NEWER_THAN_AUTOCAD_2010;NEWER_THAN_AUTOCAD_2011;。
NEWER_THAN_AUTOCAD_2012;NEWER_THAN_AUTOCAD_2013;。
NEWER_THAN_AUTOCAD_2014我需要在 MSBuild 代码中执行相同的逻辑...我尝试通过这种方式做到这一点:$(::Join(';',::Range(2009,::Add(。
::减法($(CAD_Year),2009,1))。Select(n=>::Concat(。
“NEWER_THAN_AUTOCAD_”),::减去(n,1)。ToArray()))但我在DefineConstants属性中得到这个表达式,而不是计算值。如何在 MSBuild 中执行相同的操作?。
**** Hidden Message ***** 看起来您无法使用
系统。林克
在那里,看到了吗https://msdn.microsoft.com/en-us/library/dd633440.aspx有关可以使用的静态类的列表
如何做到这一点?你真的想吗?当min_year
或target_year
发生变化时,您仍需要编辑文件,我觉得在几年内,纯文本比生成文本的函数更容易让您或其他人理解。如果您想批量进行Grep替换,使用可预测的文本模式也可以更容易地进行Grep替代。如果使用函数,还可能会发生MSBuild更改的风险-它们可能会在将来添加或删除功能并破坏它
总有
System.Text.regular表达式。Regex
(它在允许的类列表中),但我认为我是唯一一个疯狂到可以去那里的人
若要向现有常量添加更多常量,请使用
<div class=“xml geshi”>
<div><定义常量>$(定义常量);这是另一个constant
另一种选择是编写一个控制台应用程序来修改项目文件。PowerShell中的这一个就是一个很好的例子:https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1 哦,等等。我不熟悉MSBuild内联任务,但是。。。https://msdn.microsoft.com/en-us/library/dd722601.aspx
页:
[1]