Область свойств с использованием детокенизации пакета расширений msbuild

Я пытаюсь использовать пакет расширений msbuild, чтобы исправить конфигурацию нашего приложения при развертывании, я хочу иметь возможность передать свойство (ENV), которое загрузит файл конфигурации моей среды для использования с детокенизатором и исправить мое приложение конфиги. Нравится:

    <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 знает о моем файле, и у меня есть доступ к его свойствам, но при запуске детокенизатора я получаю сообщение об ошибке:

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 перед выполнением...


person James Woolfenden    schedule 08.07.2011    source источник


Ответы (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"

Поскольку ваша проблема не может быть воспроизведена, это может быть побочным эффектом других параметров, не показанных в вашем примере кода.

person Filburt    schedule 11.07.2011
comment
Спасибо за ответ, но это очень похоже на то, как это работает сейчас, и ваш метод обычно отлично работает для меня, похоже, проблема связана с загрузкой файла задачи. Я могу сообщить свойство и его правильность, но передать его задаче, и оно вернется к своему предварительно обработанному значению. - person James Woolfenden; 26.07.2011
comment
Вы можете частично решить эту проблему, используя свойство CommandLineValues ​​задачи - person James Woolfenden; 31.07.2012

Я видел ряд других вопросов, в которых происходили аналогичные проблемы: Visual Studio Игнорирование настроек файла MSBuild (csproj)

person James Woolfenden    schedule 02.08.2011