【问题标题】:Custom settings in MSBuild for Windows PhoneMSBuild for Windows Phone 中的自定义设置
【发布时间】:2015-03-09 15:59:32
【问题描述】:
我有一个为我执行 MSBuild 的 Jenkins 服务器。
有一大堆构建需要完成,它们都使用相同的解决方案文件,但对于每个构建都需要更改一些自定义设置。
应用需要能够读取这些设置。
例如,如果我要这样构建:
msbuild MyProject.sln /p:MyVar=SomeValue
然后当应用程序启动时,它应该能够检索 MyVar 的值。
例如,应用应该能够在以标题“SomeValue”开头时显示消息框。
我知道我可以按照 Microsoft 的 here 所述定义属性,但我不知道在应用启动时如何读取这些属性。
或者,也许我只是在寻找一种完全错误的方法。
有什么想法吗?
【问题讨论】:
标签:
c#
properties
jenkins
msbuild
windows-phone
【解决方案1】:
您需要 msbuild 来创建一个包含值的文本文件。为此,您可以在 msbuild 文件中使用 MSBuild.Community.Tasks.Target 的 TemplateFile 任务。
CreateAppVarFile.targets文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
<Target Name="CreateAppVarFile">
<ItemGroup>
<TemplateContext Include="MyVar">
<ReplacementValue>$(MyVar)</ReplacementValue>
</TemplateContext>
</ItemGroup>
<TemplateFile Template="$(MSBuildThisFileDirectory)appvar.txt" OutputFilename="$(ProjectDir)appvar.txt" Tokens="@(TemplateContext)"/>
</Target>
</Project>
然后这个目标将包含在您的项目文件中
<Import Project=".\build\CreateAppVarFile.targets" />
<Target Name="BeforeBuild" DependsOnTargets="CreateAppVarFile">
您的 CreateAppVarFile.targets 文件所在文件夹中的 .\build\appvar.txt 模板文件可能如下所示:
$(MyVar)
并在运行时从您的应用中读取。不要忘记在您的项目中包含 appvar.txt。它将包含:
SomeValue
【讨论】:
-
嘿,谢谢。我已经按照您告诉我的方式设置了项目,但出现此错误:“F:\BuildApp\BuildApp.csproj”(默认目标)(1)->(_CheckForInvalidConfigurationAndPlatform 目标)->C:\Program Files (x86) \MSBuild\12.0\bin\MSBuild.ExtensionPack.tasks(3,5):错误 MSB4068:元素 无法识别,或在此上下文中不受支持。 [F:\BuildApp\BuildApp.csproj]