2017-01-23 3 views
1

Я использую расширение VSS SlowCheetah для преобразования нашего app.config с различными значениями в зависимости от конфигурации проекта. Таким образом, конфигурация «Отладка» создает файл app.config со значениями, подходящими для пользователей Dev/Qa, а сборка «Release» создает app.config с производственными значениями.Состояние MSBuild, чтобы предотвратить преобразование XML app.config

.csproj содержит раздел, как это:

<ItemGroup> 
<None Include="App.config"> 
    <SubType>Designer</SubType> 
    <TransformOnBuild>true</TransformOnBuild> 
</None> 
<None Include="App.Debug.config"> 
    <DependentUpon>App.config</DependentUpon> 
    <IsTransformFile>True</IsTransformFile> 
    <SubType>Designer</SubType> 
</None>  
<None Include="App.Release.config"> 
    <DependentUpon>App.config</DependentUpon> 
    <IsTransformFile >True</IsTransformFile>  
</None> 
<None Include="packages.config" /> 
<None Include="Properties\SlowCheetah\SlowCheetah.Transforms.targets" /> 

И логика MSBuild содержится главным образом в файле 'SlowCheetah.Transforms.targets. Мои файлы преобразуются правильно.

Я хочу защитить от разработчика, случайно запускающего сборку «Release» внутри Visual Studio и непреднамеренное запуск моего приложения с помощью файла конфигурации производства. Моя идея заключается в том, чтобы использовать условие MSBuild, возможно, что-то вроде:

Condition=" '$(BuildingInsideVisualStudio)'=='true' " 

Я попытался использовать это условие в нескольких местах в файле .csproj без успеха. Я подозреваю, что могу заставить это работать, если я модифицирую сам файл SlowCheetah.Transforms.targets, но этот файл не должен изменяться в соответствии с комментариями вверху.

В идеале я хотел бы, чтобы ВСЕ конфигурации для сборки внутри Visual Studio использовали мой конфигурационный файл Debug, а для Visual Studio (например, строит на сервере непрерывной интеграции) сборку «выпускает», но я использую Prod app.config, но я «соглашайтесь на возможность предотвратить случайное выполнение сборки« Release »внутри Visual Studio. Любые предложения относительно того, если/как это может быть достигнуто, оценены.

ответ

1

Добавить это как раз перед </Project>:

<Target Name="BeforeBuild"> 
    <Error Condition=" '$(BuildingInsideVisualStudio)'=='true' And '$(Configuration)'=='Release' " 
      Text="JMc is so mad at you you trying to build using the Release configuration from Visual Studio." /> 
    </Target> 
+0

хорошо делает свою работу. Благодарю. – JMc

+1

Хорошей альтернативой с использованием того же условия является указание значений DEV в app.config и отдельное преобразование для конфигурации «Release». Затем поместите «Условие» в группу свойств «SlowCheetah». В результате преобразование происходит только при построении вне VS. При построении внутри VS вы всегда получаете файл DEV app.config. – JMc

+1

$ ([System.IO.Path]: : GetFullPath ($ (MSBuildProjectDirectory) \ .. \ packages \ SlowCheetah.2.5.15 \ tools \)) .... – JMc

Смежные вопросы