展開パッケージを作成するweb.config
と変更されますが、この部分がわかりません:
2 つのweb.config
変換ファイルがweb.debug.config
あり、web.release.config
.
これらの変換ファイルは、Web 配置または配置パッケージを作成する場合にのみ利用可能または機能しますか? web.config
プロジェクトが Visual Studio からローカルで実行される場合 (IIS Express 経由など) 、変換は使用されませんか?
展開パッケージを作成するweb.config
と変更されますが、この部分がわかりません:
2 つのweb.config
変換ファイルがweb.debug.config
あり、web.release.config
.
これらの変換ファイルは、Web 配置または配置パッケージを作成する場合にのみ利用可能または機能しますか? web.config
プロジェクトが Visual Studio からローカルで実行される場合 (IIS Express 経由など) 、変換は使用されませんか?
コンパイル中に変換された構成ファイルが必要な場合は、プロジェクト ファイル (.csproj) を編集して以下のコードを追加することで取得できます。
<Target Name="AfterBuild">
<TransformXml Source="$(SolutionDir)WCFServices\Web.config"
Transform="$(SolutionDir)WCFServices\Web.Release.config"
Destination="$(OutDir)WebRelease.config"
StackTrace="true" />
</Target>
複数の TransformXml タグを追加して、必要な構成ファイルをすべて取得できます。また、これはビルドの前または後に行うことができます。
あなたは正しいです。
展開パッケージを展開または実行すると、構成変換が適用されます。
それらはコンパイル時に変換されません。
これに適した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>
MSBuild と SlowCheetah という拡張機能を使用して呼び出すことができます。