首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何评估MSBuild中的字符串?

如何评估MSBuild中的字符串?
EN

Stack Overflow用户
提问于 2018-12-11 04:34:46
回答 1查看 0关注 0票数 0

我按照NuGet中的Bundling .NET构建工具教程,它适用于我。但是如果仔细查看调用该工具的项目中包含的目标文件,您会注意到它定义的其中一个属性是引用的而另一个不是:

代码语言:javascript
复制
<PropertyGroup>
  <TypescriptOutput>"$(MSBuildProjectDir)/wwwroot/ts-gen/"</TypescriptOutput>
  <NamespaceFilter>$(RootNamespace).Typescript</NamespaceFilter>  
</PropertyGroup>

原因似乎是在工具自己的项目的上下文中评估了不带引号的属性,而引用的属性作为文字传递,因此可以在调用该工具的项目的上下文中对它们进行求值。

所以这是我的目标文件,它包含在调用我的工具的项目中:

代码语言:javascript
复制
<Project>
    <PropertyGroup>
        <NSwagClientGeneratorExe Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'">$(MSBuildThisFileDirectory)net47\NSwagClientGenerator.exe</NSwagClientGeneratorExe>
        <NSwagClientGeneratorConfig>"NSwagClientGenerator.$(Configuration).json"</NSwagClientGeneratorConfig>
        <NSwagClientGeneratorOutput>"$(IntermediateOutputPath)NSwagClientGenerator.g.cs"</NSwagClientGeneratorOutput>
    </PropertyGroup>
    <Target Name="NSwagClientGeneratorGenerate" Inputs="$(NSwagClientGeneratorConfig)" Outputs="$(NSwagClientGeneratorOutput)">
        <Message Importance="high" Text="NSwagClientGenerator: generating clients for $(Configuration)" />
        <Exec Command="$(NSwagClientGeneratorExe) $(NSwagClientGeneratorConfig) $(NSwagClientGeneratorOutput)" />
    </Target>
    <Target Name="NSwagClientGeneratorInclude" BeforeTargets="CoreCompile" DependsOnTargets="NSwagClientGeneratorGenerate">
        <ItemGroup Condition="Exists($(NSwagClientGeneratorOutput))">
            <Compile Include="$(NSwagClientGeneratorOutput)" />
            <FileWrites Include="$(NSwagClientGeneratorOutput)" />
        </ItemGroup>
    </Target>
</Project>

注意如何NSwagClientGeneratorConfigNSwagClientGeneratorOutput被引用。这会导致在调用我的工具的项目的上下文中对它们进行求值,因此使用正确的命令行参数调用该工具。这很有效。

问题是让生成的源包含在构建中。这部分实际上在我的文件名属性没有被引用之前工作,因此我使用了错误的文件名。但现在引用了属性,Exists($(NSwagClientGeneratorOutput))条件不再正确。我想我想做的就是评估$(NSwagClientGeneratorOutput)所以它包含的变量会扩展到正确的路径。我怎么做?我猜测可能有一个叫做的函数Eval,但显然不是。

EN

回答 1

Stack Overflow用户

发布于 2018-12-11 14:17:44

这最终成为XY问题。希望在Property Functions的文档中找到“eval”函数,我发现了这一点:

所有构建属性值都只是字符串值。您可以使用字符串(实例)方法对任何属性值进行操作。

所以这适用于我的特殊情况:

代码语言:javascript
复制
<ItemGroup Condition="Exists($(NSwagClientGeneratorOutput.Trim('&quot;')))">
    <Compile Include="$(NSwagClientGeneratorOutput.Trim('&quot;'))" />
    <FileWrites Include="$(NSwagClientGeneratorOutput.Trim('&quot;'))" />
</ItemGroup>

我提出的问题的答案可能是“你做不到”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档