2011-07-08 1 views
0

Я пытаюсь использовать пакет расширения msbuild для установки конфигурации нашего приложения при развертывании, Я хочу иметь возможность передать свойство (ENV), которое будет загружать конфигурационный файл определенной среды для использования с детокенизатором и исправления моих конфигураций приложений. Как это:Область действия с использованием расширительного пакета 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/р: 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 ​​задачи –