2011-07-08 43 views
0

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

<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 : 

所有工作正常,如果我硬代码IT- 任何想法如何解决这个问题。我想这样做对我执行前的MSBuild的一些文本替换...

回答

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" 

由于是你的问题不能被再现,因此它可能是在你的示例代码未示出的其他参数的副作用。

+0

感谢您的回答,但相当mcuh它是如何工作现在和你的方法通常工作得很好,对我来说这就是,它似乎是关于加载任务文件导致问题的东西。我可以通知该属性及其正确性,但将其传递给该任务,并将其恢复为预处理值。 –

+0

您可以通过使用任务的属性CommandLineValues部分解决此问题 –