11月 222013
 

参考:IISマネージャーからアプリケーションインポートしたら、アプリケーションプールのエラーが出た – minato128のブログ

まさにこれ。

  • msdeployはデプロイ先のアプリケーションプールの.NETバージョンとデプロイ対象アプリのバージョンが一致しているかチェックする
  • IISに4.5をインストールしていたとしても、設定できるのはv4.0
  • VS2010のtargetは4.5に対応していないのか、この状況ではエラーを吐いてデプロイできない

使用しようとしているアプリケーション プールでは、’managedRuntimeVersion’ プロパティが ‘v4.0’ に設定されています。このアプリケーションには ‘v4.5’ が必要です。

  • /t:Packageでデプロイパッケージを作る際のmsbuildオプションに/p:VisualStudioVersion=11.0 (2013は12.0なのかな?)をつければVS2012のtargetを使用するようになるらしく、エラーを吐かずに正常にデプロイ出来るようになる
7月 062012
 

VisualStudio標準では、XML-Document-Transformで差分を記述し、元のファイルを変換するという方法となる。
Web アプリケーション プロジェクト配置の Web.config 変換構文

以下のようなファイルを用意し、Web.Debug.configやWeb.Release.configといったファイル名にすれば、Debugビルド時にはWeb.Debug.configファイルを、Releaseビルド時にはweb.Release.configファイルがWeb.configとマージされる。

[xml title=”Web.Release.config”]






[/xml]

Debug/Releaseだけでは2環境しか対応できないが、3環境以上対応したい場合もそれなりにある。
その場合はProjectConfigTransformFileNameプロパティを変更することで対応可能。

[xml title=”sample.targets” mark=”3″]


@(_VSProjectConfigFileName->’%(FileName).$(DeploymentEnvironment)%(Extension)’)


[/xml]

というようなtargetsファイルをImportしておけば、

msbuild /t:Package /p:DeploymentEnvironment=production

とかやった場合にWeb.production.configを用いてWeb.configが変換される。
これはMicrosoft.Web.Publishing.targetsの内部動作に依存している。
VisualStudioに含まれるtargetsであるため、VSをインストールしないと利用できない。

ここでDeploymentEnvironmentのみ変更してビルドしなおした場合、Web.configが最新状態であるとみなされて変換されないことがある。

PostTransformWebConfig:
  Web.production.config を使用して Web.config を obj\Release\TransformWebConfig\transformed\Web.config に変換しました。
PipelineTransformPhase:
  パイプラインの発行の変換フェーズ
PreAutoParameterizationWebConfigConnectionStrings:
  obj\Release\CSAutoParameterize\original\Web.config への obj\Release\TransformWebConfig\transformed\Web.config のコピーをスキップします。ファイル obj\Release\CSAutoParameterize\original\Web.config は最新のものです
AutoParameterizationWebConfigConnectionStringsCore:
すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "AutoParameterizationWebConfigConnectionStringsCore" を省略します。

この場合、Cleanターゲットも実行するようにすれば対処可能。

PostTransformWebConfig:
  Web.production.config を使用して Web.config を obj\Release\TransformWebConfig\transformed\Web.config に変換しました。
PipelineTransformPhase:
  パイプラインの発行の変換フェーズ
PreAutoParameterizationWebConfigConnectionStrings:
  ディレクトリ "D:\Jenkins\workspace\example\obj\Release\CSAutoParameterize\transformed\" を作成しています。
  obj\Release\TransformWebConfig\transformed\Web.config を obj\Release\CSAutoParameterize\original\Web.config にコピーしています。
AutoParameterizationWebConfigConnectionStringsCore:
  ソース ファイルを変換しています: D:\Jenkins\workspace\example\obj\Release\TransformWebConfig\transformed\Web.config
    変換ファイルを適用しています: 
          
            
              
            
          
    出力ファイル: obj\Release\CSAutoParameterize\transformed\Web.config
  変換に成功しました
7月 052012
 

AppConfigプロパティでapp.configファイルを指定すれば良い。
[xml title=”sample.targets” mark=”3″]
app.$(DeploymentEnvironment).config
[/xml]
というようなtargetsファイルをImportすれば、ビルド時のDeploymentEnvironmentプロパティに応じてプロパティファイルが切り替わる。

msbuild /t:Build /p:DeploymentEnvironment=production

とかやった場合は、app.production.configが読み込まれる。

これは、.NET Frameworkの標準targetsであるMicrosoft.Common.targets内でAppConfigプロパティが読み込まれているのを利用している。
たぶん標準的な方法ではない。。

因みにXDTを用いることも可能な模様。
Vishal Joshi’s Tangent: Applying XDT magic to App.Config