Использование преобразований app.config SlowCheetah с проектами установки - PullRequest
3 голосов
/ 27 января 2012

Я использую расширение SlowCheetah XML Transforms для обработки преобразований, подобных web.config, с помощью app.config.Эта часть прекрасно работает.

Я добавил проект установки и настроил его так, чтобы он включал выходные данные проекта первого проекта.Я заметил, что когда я запустил установщик, он установил не преобразованный app.config.Глядя на первичные выходные данные (скажем, в 10 раз быстрее), я заметил, что он находит двоичный файл в Project\bin\Debug\Project.exe, но Project.exe.config исходит из Project\app.config вместо Project\bin\Debug\Project.exe.config.

.app.config из первичного вывода и жестко запрограммируйте путь к app.config конкретной конфигурации (Project\bin\Debug\Project.exe.config), но тогда я получу один и тот же app.config независимо от того, какую конфигурацию я использовал для его построения.

Есть ли обходной путь для получения соответствующего преобразованного app.config в проекте установки?

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Привет, мы планируем выпустить новую версию с поддержкой ClickOnce в ближайшие несколько дней.Если вам нужна сборка надстройки ранее, чем исправление, свяжитесь со мной, и я могу сообщить вам об этом.

1 голос
/ 27 января 2012

Возможно, это не совсем тот ответ, который вы ищете, но ранее я пытался найти правильный файл app.config в проекте установки. У меня есть файл msbuild TFSBuild.proj, который использует преобразования. Преобразования SlowCheetah, я думаю, используют ту же задачу msbuild, но я могу ошибаться. SlowCheetah, безусловно, обеспечивает более полезный пользовательский интерфейс при работе с файлами преобразования. Мой файл сборки использует немного другой подход. В конце автоматизированной сборки я хотел создать установщики для каждой целевой среды развертывания. Я использую несколько расширений msbuild, в том числе задачу сборки TransformXml - не все требуется для следующего, но FWIW это импорт:

<!-- import extensions -->
<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks"/>
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<UsingTask TaskName="TransformXml"
       AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

У меня определены следующие среды:

<ItemGroup>
  <!-- target deployment environments -->
  <Configs Include="Prod" />
  <Configs Include="Staging" />
  <Configs Include="Test" />
</ItemGroup>

Тогда стандартная цель AfterCompileSolution содержит вызов цели, который генерирует установщик для каждой среды:

<Target Name="AfterCompileSolution">

  <!-- Create installers for target deployment environments -->
  <CallTarget Targets="MyProject" />

</Target>

<Target Name="MyProject" Outputs="%(Configs.Identity)">
  <ItemGroup>
    <MyProjectTempConfig Include="$(SolutionRoot)\MyProjectService\Temp.config" />
    <MyProjectConfigFrom Include="$(SolutionRoot)\MyProjectService\App.%(Configs.Identity).config" />
    <MyProjectConfigTo Include="$(SolutionRoot)\MyProjectService\App.config">
      <Attributes>ReadOnly</Attributes>
    </MyProjectConfigTo>
  </ItemGroup>

  <Message Text="MyProject - Target environment: %(Configs.Identity)" />

  <!-- transform app.config using appropriate -->
  <Copy SourceFiles="@(MyProjectConfigTo)"
        DestinationFiles="@(MyProjectTempConfig)"
        OverwriteReadOnlyFiles="true"
        ContinueOnError="true"
        Condition="!Exists(@(MyProjectTempConfig))"/>

  <File TaskAction="RemoveAttributes" Files="@(MyProjectConfigTo)"/>

  <TransformXml Source="@(MyProjectTempConfig)"
                Transform="@(MyProjectConfigFrom)"
                Destination="@(MyProjectConfigTo)" />

  <!-- run setup -->
  <Exec Command="&quot;$(ProgramFiles)\Microsoft Visual Studio 10.0\Common7\IDE\devenv&quot; &quot;$(SolutionRoot)\MyProject.sln&quot; /build Release /project MyProjectService.Setup"/>

  <!-- rename output for target deployment environment -->
  <Copy SourceFiles="$(SolutionRoot)\MyProjectService.Setup\Release\MyProjectService.msi"
        DestinationFiles="$(OutDir)\%(Configs.Identity)_MyProjectService.msi"
        OverwriteReadOnlyFiles="true"
        ContinueOnError="true"/>

</Target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...