13

.NET 4.0 で msbuild を使用すると、"Package" ターゲットを使用して Web プロジェクトをビルドでき、パッケージを zip ファイルにうまく配置できます。しかし、そこにあるweb.configを見ると、変換されておらず、「$(ReplacableToken_Web_SiteConnection-Web.config Connection String_0)」があります

「TransformWebConfig」ターゲットを実行すると、適切な変換が行われますが、独自のサイロでのみ実行されます。

また、「Build」ターゲットを実行して「DeployOnBuild=True;DeployTarget=MSDeployPublish」プロパティを渡すと、適切な web.config 変換が行われたサーバーにパッケージがデプロイされます。

しかし、パッケージをサーバーに手動でデプロイしたい場合、zip ファイルに最終的な web.config が含まれるように、「TransformWebConfig」を使用して「パッケージ」を実行するにはどうすればよいですか?

4

2 に答える 2

12

これを回避したい場合は、ビルドでプロパティを設定する必要があります。これには 2 つの方法があります

  1. プロジェクト ファイルを編集する
  2. .wpp.targets ファイルを作成する

#2をお勧めします。この場合、プロジェクト ファイルと同じディレクトリに {ProjectName}.wpp.targets という名前の新しいファイルを作成します。{ProjectName} はプロジェクトの名前です。次に、このファイル内に次の内容を配置する必要があります。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         ToolsVersion="4.0">
  <PropertyGroup>
    <AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
  </PropertyGroup>
</Project>

この場合AutoParameterizationWebConfigConnectionStrings、接続文字列の web.config にこれらの {} プレースホルダーを挿入しないよう Web パブリッシング パイプラインに指示するプロパティを設定しています。

于 2010-10-13T05:05:32.197 に答える
10

これを行う方法は、パッケージ化する前に変換を行うようにプロジェクト ビルドを変更することです。

ターゲットは TransformXml と呼ばれ、Microsoft.Web.Publishing.Tasks.dll の一部です。

あなた自身のターゲットでは

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"  /> 

ただし、デフォルトの VS C# ビルドには含まれます。

そう

<TransformXml Source="web.config" Transform="web.release.config" Destination="$(DeployPath)\web.config" />

私たちのためにトリックを行います。

これらのパスを適切な ItemGroup (「コンテンツ」である可能性が最も高い) で設定し、.csproj で Package を呼び出す前にターゲットが起動されるようにします。ビルド出力には、通常のように「Web.config」が含まれます。右変換された値。

の方法として (すべての人にすべてを提供する必要があるパッケージにこれを使用しました)、そのトリックを使用してすべての変換を行い、それぞれを最終的なパッケージに含めることができます。

次に、手動で Msdeploy を呼び出し、スキップ ディレクティブと置換ディレクティブ (専門用語を忘れました) を使用して、デプロイ時に適切なディレクティブのみを出力します。

パッケージに web.usethisone.config があると仮定すると、次のようになります。

-skip:objectname=filepath,absolutepath=web\..*\.config 

-replace:objectName=filepath,match=.*web\.usethisone\.config,replace=web.config
于 2010-09-01T23:26:56.707 に答える