0

私はそれがどのように動作するかについてはあまりよく分かりません。Web.config変換はどのように動作しますか?

つまり、デプロイメントパッケージを作成すると、Webコンフィグレーションは変更されますが、疑いはありません。

私は2つのWebConfigの変換ファイルを持っている:

web.debug.config web.release.config

これらの変換ファイルは、単に入手可能であるか、または私たちはwebDeployを作るか、展開パッケージを作るときだけ動作しますか?ルートWeb.configは、プロジェクトがVisual Studio(Web Developer Express)から実行されているときに使用されます。

つまり、プロジェクトがVisual Studioから実行されているときにweb.config変換が機能しないということですか?

答えて

1

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

+0

ですが、それは、私はこのエラーを得た表現のVisual Studio Web開発者では動作しませんようだ:「この拡張機能はありません任意の現在インストールされた製品はインストールできません」。 – Allende

+0

Webプロジェクトの場合、SlowCheetahでもファイルはpackage/publish上でのみ変換されます。 –

+0

拡張機能はWeb Developer Expressではサポートされていません。拡張機能には有料版のVisual Studioが必要です。 –

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タグを追加して、必要な設定ファイルをすべて取得することができます。また、これはビルドの前後に行うことができます。

+0

ありがとう@チャールズ!私はそれを知らなかった。 – Allende

0

これには、Configuration TransformというVSエクステンションがあります。 これをインストールせずにこのを実現するには、デモソリューションに示されている例に従って、異なるビルド設定ファイルを追加し、プロジェクトファイルに新しいMSBuildタスクを追加します。デモソリューションのThe download linkは、拡張機能のVisual Studio Gallery 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> 

また、これにはpostがあります。 Publish.pubxmlProjectFolder /Properties/PublishProfiles/Publish.pubxml)ファイルシステムが公開行うには、このようにウェブ - web.configファイルの変換のためのさらなる

Since VS2012我々はパブリッシュプロファイルを追加することができます。設定の変換はデフォルトで行われます。以下は、私がしようとサンプル

<?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> 
関連する問題