使用msbuild扩展包detokenise的属性范围

时间:2011-07-08 15:06:16

标签: msbuild msbuild-task

我正在尝试使用msbuild扩展包来修复部署时我们的应用配置, 我希望能够传递一个属性(ENV),它将加载我的环境特定配置文件以与detokeniser一起使用,并修复我的应用程序配置。 像这样:

    <UsingTask TaskName="MSBuild.ExtensionPack.FileSystem.Detokenise"
           AssemblyFile=".\Tools\MSBuild Extension Pack 4.0.3.0\MSBuild.ExtensionPack.dll"/>
<Import Project=".\Environments\$(Env).properties"/>
<Target Name="Build" >
    <ItemGroup>
        <SourceTemplates Include=".\Templates\**\*.*"/>
    </ItemGroup>

    <RemoveDir Directories=".\Temp"/>
    <MakeDir Directories=".\Temp"/>

    <Message Text="@(SourceTemplates)"/>

    <Copy SourceFiles="@(SourceTemplates)"
          DestinationFolder=".\Temp\%(RecursiveDir)" />

    <ItemGroup>
        <TargetTemplates Include=".\Temp\**\*.*"/>
    </ItemGroup>

    <MSBuild.ExtensionPack.FileSystem.Detokenise
         TaskAction="Detokenise"
         TargetFiles="@(TargetTemplates)"/>
</Target>

所以我用

来称呼它

msbuild Detokenise.msbuild / p:Env = Prod

Msbuild知道我的文件并且我可以访问其属性,但是当detokeniser运行时我得到错误:

Detokenise Task Execution Completed [15:07:50]
C:\Source\1.2\Build\Detokenise.msbuild(27,3):
error : InvalidProjectFileException: The imported project "C:\Source\1.2\Build\Environments\.properties" was not found.
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
C:\Source\1.2\Build\Detokenise.msbuild\r
C:\Source\1.2\Build\Detokenise.msbuild(27,3): error :

如果我硬编码,一切正常 - 任何想法如何解决这个问题。我想在执行之前在msbuild上做一些文本替换...

2 个答案:

答案 0 :(得分:2)

您可以尝试将此参数指定给本地属性:

<PropertyGroup Condition="'$(Env)'=='Prod'">
    <TargetEnv>Prod</TargetEnv>
</PropertyGroup>

<!-- add other environments as needed -->
<PropertyGroup Condition="'$(Env)'=='Test'">
    <TargetEnv>Test</TargetEnv>
</PropertyGroup>

<Import Project=".\Environments\$(TargetEnv).properties"/>

您也可以尝试将参数值括在引号中:

msbuild Detokenise.msbuild /p:"Env=Prod"

由于您的问题无法复制,因此可能是示例代码中未显示的其他参数的副作用。

答案 1 :(得分:0)

我已经看到其他一些问题,其中发生了类似的问题: Visual Studio Ignoring MSBuild file (csproj) Customizations