1

展開パッケージを作成するweb.configと変更されますが、この部分がわかりません:

2 つのweb.config変換ファイルがweb.debug.configあり、web.release.config.

これらの変換ファイルは、Web 配置または配置パッケージを作成する場合にのみ利用可能または機能しますか? web.configプロジェクトが Visual Studio からローカルで実行される場合 (IIS Express 経由など) 、変換は使用されませんか?

4

4 に答える 4

4

コンパイル中に変換された構成ファイルが必要な場合は、プロジェクト ファイル (.csproj) を編集して以下のコードを追加することで取得できます。

<Target Name="AfterBuild">
    <TransformXml Source="$(SolutionDir)WCFServices\Web.config" 
                  Transform="$(SolutionDir)WCFServices\Web.Release.config" 
                  Destination="$(OutDir)WebRelease.config" 
                  StackTrace="true" />
</Target>

複数の TransformXml タグを追加して、必要な構成ファイルをすべて取得できます。また、これはビルドの前または後に行うことができます。

于 2012-05-01T20:21:55.480 に答える
4

あなたは正しいです。

展開パッケージを展開または実行すると、構成変換が適用されます。

それらはコンパイル時に変換されません。

于 2012-04-20T15:52:10.157 に答える
1

これに適したConfiguration Transformと呼ばれる別の VS 拡張機能があります。インストールしたくないがこれを実現するには、デモ ソリューションに示されている例に従って、さまざまなビルド構成ファイルを追加し、プロジェクト ファイルにいくつかの新しい MSBuild タスクを追加します。デモ ソリューションのダウンロード リンクは、拡張機能の Visual Studio ギャラリー Web ページにあります。MSBuild は XSLT を使用して XML 変換を行うため、このアプローチでは追加のパッケージは必要ありません。

以下は、デモ ソリューションからプロジェクト ファイルに追加された MSBuild タスクです。私の場合、VS2015 ASP.NET MVC プロジェクトでそれに従ったとき、入力する必要はありませんでし<UsingTask TaskName="TransformXml" AssemblyFile=...た。

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="AfterCompile" Condition="Exists('App.$(Configuration).config')">
    <!--Generate transformed app config in the intermediate directory-->
    <TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
    <!--Force build process to use the transformed configuration file from now on.-->
    <ItemGroup>
      <AppConfigWithTargetPath Remove="App.config" />
      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>
  <!--Override After Publish to support ClickOnce AfterPublish. Target replaces the untransformed config file copied to the deployment directory with the transformed one.-->
  <Target Name="AfterPublish">
    <PropertyGroup>
      <DeployedConfig>$(_DeploymentApplicationDir)$(TargetName)$(TargetExt).config$(_DeploymentFileMappingExtension)</DeployedConfig>
    </PropertyGroup>
    <!--Publish copies the untransformed App.config to deployment directory so overwrite it-->
    <Copy Condition="Exists('$(DeployedConfig)')" SourceFiles="$(IntermediateOutputPath)$(TargetFileName).config" DestinationFiles="$(DeployedConfig)" />
  </Target>

.csproj ファイルに適用した方法は次のとおりです。非常に簡単です。

  <Target Name="AfterBuild" Condition="Exists('Web.$(Configuration).config')">
    <Exec Command="attrib -R Web.config" />
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" StackTrace="true" />
  </Target>

また、これに関する良い投稿があります。

さらに、web.config 変換の場合、VS2012 以降では、発行プロファイルを追加できます - Publish.pubxml ( ProjectFolder /Properties/PublishProfiles/Publish.pubxml) を使用して FileSystem 発行を実行すると、デフォルトで web.config 変換が行われます。以下はサンプルです

  <?xml version="1.0" encoding="utf-8"?>
  <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
      <WebPublishMethod>FileSystem</WebPublishMethod>
      <SiteUrlToLaunchAfterPublish />
      <publishUrl Condition="$(OutDir) != ''">$(OutDir)\_PublishedWebsites\$(ProjectName)</publishUrl> <!-- For MSBuild -->
      <publishUrl Condition="$(OutDir) == ''">$(MSBuildThisFileDirectory)..\..\_PublishedWebsite\</publishUrl> <!-- For Visual Studio...cant use $(ProjectName) -->
      <DeleteExistingFiles>True</DeleteExistingFiles>
    </PropertyGroup>
  </Project>
于 2016-02-03T22:29:12.080 に答える
1

MSBuild と SlowCheetah という拡張機能を使用して呼び出すことができます。

于 2012-04-20T15:52:12.690 に答える