2013-08-30 6 views
6

Nuget経由でSlowCheetahパッケージをインストールし、ビルド設定に基づいてweb.config用のトランスフォームファイルを追加しました。 しかし、ビルドでは、web.configは変換されません。プロジェクトファイルを確認し、SlowCheetah PropertyGroupとImport要素のエントリを確認しました。私はプロジェクトファイルの変換の対象を見ていません。 app.configファイルを追加すると、app.configファイルが変換されます。 SlowCheetahパッケージをインストールすると、プロジェクトのMSBuildファイルにweb.configトランスフォームターゲットが自動的に追加されるはずです。私は手動で追加することができますが、私はSlowCheetahが箱からそれをすると思った。 何か不足していますか?私に知らせてください。 私の要件は、web.configファイルがビルド構成に基づいて変換され、変換されたweb.configファイルが出力ディレクトリに配置される必要があるということです。 ご協力ありがとうございます。SlowCheetahがビルド時にweb.configを変換しない

答えて

0

変換ファイルの「出力ディレクトリにコピー」プロパティを「コピーしない」に設定しましたか? プロジェクトファイルも確認してください。

次のエントリが(この場合は2.5.7で、あなたがインストールされたバージョンに依存)を追加する必要があり、プロジェクトファイルで

<PropertyGroup Label="SlowCheetah"> 
<SlowCheetah_EnableImportFromNuGet Condition=" '$(SC_EnableImportFromNuGet)'=='' ">true</SlowCheetah_EnableImportFromNuGet> 
<SlowCheetah_NuGetImportPath Condition=" '$(SlowCheetah_NuGetImportPath)'=='' ">$([System.IO.Path]::GetFullPath($(MSBuildProjectDirectory)\..\packages\SlowCheetah.2.5.7\tools\SlowCheetah.Transforms.targets))</SlowCheetah_NuGetImportPath> 
<SlowCheetahTargets Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='true' and Exists('$(SlowCheetah_NuGetImportPath)') ">$(SlowCheetah_NuGetImportPath)</SlowCheetahTargets> 

<Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" Label="SlowCheetah" /> 
+1

、これはSlowCheetahの現在のバージョンは100%間違っています。 – EKW

9

Visual Studioは、ときにのみ変換を行っています公開機能を使用してプロジェクトを展開します。ビルドを行うときにそれを行うには、MSBuildスクリプトを微調整する必要があります。完全な解はhereです。ここでは必需品:

ファイルプロジェクトでは、既存の Web.Debug.configとWeb.Release.configほか、Web.Base.configという名前のファイルを作成します。このファイルは になります。古いWeb.configに相当します。これは、 の変換の基本となるためです。これらのファイルは次のようになります。

Web.config、Web.Base.config、Web.Debug.config、Web.Release.config、および Web.config。ちょうどクロージング - タグの前に、あなたの .csprojファイルの末尾に以下の設定を追加します:

<Target Name="BeforeBuild"> 
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
</Target> 

UPDATE:私は実現のコメントでリマインダーから私も 問題を持っていること公開時にVisual StudioでXMLを2回変換する プロジェクトを公開しました。 Web.Base.Configの必要はありませを:私は可能な簡単な解決策を発見したフィリップの答えについては詳しく説明しないために

<Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''"> 
+2

Visual Studio 2013の場合、タスクが既にインポートされているため、は必要ありません。 – MikeJansen

+0

共有いただきありがとうございます。 –

+0

yas yas yas yas ! – TWilly

3

:これを解決するには、次のように ターゲットタグに条件を追加することですWeb.configを上書きすることでソース管理に問題が発生することはありません。

BeforeBuild:ターゲットをTargetDirとTargetFileNameに設定します。

AfterBuild:ビルドが完了した後、これを公開されたWebサイトにコピーします。見ている人のため

<Target Name="BeforeBuild"> 
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="$(TargetDir)$(TargetFileName).config" /> 
</Target> 
<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Dev' Or '$(Configuration)' == 'Test' Or '$(Configuration)' == 'Prod'"> 
    <Delete Files="$(TargetDir)_PublishedWebsites\$(ProjectName)\Web.config" /> 
    <Copy SourceFiles="$(TargetDir)$(TargetFileName).config" DestinationFiles="$(TargetDir)_PublishedWebsites\$(ProjectName)\Web.config" /> 
</Target> 
+0

ビルドの前にそこにコピーされた設定ファイルをビルドが置き換えない理由を詳しく説明できますか?私はこれを動作させることができないので、ファイルが上書きされたためだと思います。 –

関連する問題