質問

私は、ASP.NET MVCベータ版から1.0にアップグレードし、MVCプロジェクトを次のように変更(RCリリースノートにdescibedとして)やってきます:

<Project ...>
  ...
  <MvcBuildViews>true</MvcBuildViews>
  ...
  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
  </Target>
  ...
</Project>
ビルドが私たちの地元のdevのボックスに細かい動作しますが、

、それは「型 『xxx.MvcApplication』をロードできませんでした」とTFS 2008のビルドの下に失敗し、ビルドログの下に参照してください。

...
using "AspNetCompiler" task from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "AspNetCompiler"

  Command:
  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v temp -p D:\Builds\xxx\Continuous\TeamBuild\Sources\UI\xxx.UI.Dashboard\\..\xxx.UI.Dashboard 
  The "AspNetCompiler" task is using "aspnet_compiler.exe" from "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe".
  Utility to precompile an ASP.NET application
  Copyright (C) Microsoft Corporation. All rights reserved.

/temp/global.asax(1): error ASPPARSE: Could not load type 'xxx.UI.Dashboard.MvcApplication'.
  The command exited with code 1.

Done executing task "AspNetCompiler" -- FAILED.
...

MVC 1.0は、TFSにインストールされ、同じTFSサーバー上のVisual Studioインスタンス内で構築されたときにソリューションをコンパイルします。

私は問題を作成し、このTFSを解決するにはどうすればよい?

役に立ちましたか?

解決

問題は、ASP.NET MVCプロジェクトのAfterBuildターゲット内で使用AspNetCompilerのMSBuildタスクは、WebプロジェクトのbinフォルダにDLL年代を参照するように期待しているという事実に起因します。

デスクトップでは、あなたのソースツリーの下にそれを期待する場所のbinフォルダがあるビルドします。

しかしTFS Teambuildは、ビルドサーバー上の別のディレクトリにソースの出力をコンパイルします。 AspNetCompilerのタスクが開始されると、それは必要なDLLを参照するようにbinディレクトリを見つけることができない、あなたが例外を取得します。

ソリューションは、以下のようにMVCプロジェクトのAfterBuildターゲットを変更することです。

  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler Condition="'$(IsDesktopBuild)' != 'false'" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
    <AspNetCompiler Condition="'$(IsDesktopBuild)' == 'false'" VirtualPath="temp" PhysicalPath="$(PublishDir)\_PublishedWebsites\$(ProjectName)" />
  </Target>

この変更は、デスクトップの両方でビューをコンパイルすることができますし、TFSは、サーバーを構築します。

他のヒント

実際には、この問題へのよりよい解決策があります。私はVS / TFS 2010でそれをテストしてみたが、それはまた、VS / TFS 2008で動作するはずです。

<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

私は、カスタムの目標(というよりもオーバーライドAfterBuild)と一緒に、このアプローチを使用するようにするために彼らのプロジェクトテンプレートを更新するために、MVCチームと協力するつもりです。

私はどのように<のhref = "http://blogs.msdn.com/jimlamb/archive/2010/04/20/turn-on-compile-time-view-checking-へのブログ記事を公開しました以下のため-ASP-NET-MVC-プロジェクト・イン・TFS-ビルド2010.aspx」のrel = "noreferrer"> 2010 に構築するTFSにおけるASP.NET MVCプロジェクトの確認コンパイル時ビューをオンにします。

私は当社のウェブ.csprojを建てたときに

ジム・ラムのソリューションは、私たちのために動作しませんでした。

/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

ターゲットAfterBuildを実行していたアプリケーションがまだWebProjectOutputDirにコピーされていないため。

(ところで、私はその場でビルドつまり、ビルドは私のバイナリとビュンに適しCSHTMLファイルとOUTDIRのフォルダを作成しないようにしたいcosをWebプロジェクトにこれらのプロパティを構築するパス)

この問題を回避し、彼の元のターゲットの意思を尊重するために、私は次のようでした。

<PropertyGroup>
    <OnAfter_WPPCopyWebApplication>
        MvcBuildViews;
    </OnAfter_WPPCopyWebApplication>
</PropertyGroup>

<Target Name="MvcBuildViews" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

私はあなたが.csprojファイルに以下の設定を変更した意味と仮定します:

<MvcBuildViews>true</MvcBuildViews>

あなたは、あなたの質問に投稿された設定は触れてはいけません。 それはあなたのローカルマシン上で動作する場合は、明らかにあなたは、ASP.NET MVCアプリケーションを事前に構築することができます。

私はあなたのTFS環境を構築し、ローカルVSマシン間の異なる何追跡する必要があると思います。多分それは、MSBuildのか何かの異なるバージョンを使用しています。

詳細出力を構築し、違うものを見るために2つを比較し、両方実行してください。

我々はまだこれをテストしているが、あなたがあなたのDEBUGビルドバージョンのプロパティグループに、タグセットから真/偽を動かすことができることを、あなたはまだtrueに設定することができ、MSBuildのがコンパイルされます表示されます(MSBuildのを想定しTfsBuild.projファイルには、デバッグ構成以外のもの)を使用するように設定されています。あなたはこれを実現するために、メモ帳を使用してcsprojファイルを編集する必要があります。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <MvcBuildViews>true</MvcBuildViews>
    ....

あなたはデバッグ構成プロパティ・グループ(以下)に、上記のデフォルトプロパティグループからMVCBuildViewsタグを移動する必要があります。私たちはTFS / MSBuildの設定を取得するときに、再び、私たちはTFSにおける当社のTFSBuild.projファイルに追加のステップを投稿してみましょう。

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <MvcBuildViews>true</MvcBuildViews>
    <DebugSymbols>true</DebugSymbols>
    ....

この問題は1に似たようだについてここに話を聞きました: ます。http:// blogs.msdn.com/aaronhallberg/archive/2007/07/02/team-build-and-web-deployment-projects.aspxする aspnet_compiler.exeの呼び出しがインクルードは、ビルドマシン上のMVCプロジェクトのbinフォルダにないので、バイナリを見つけることができないようです。私はまだ解決策を働いていない。

受け入れ答えは私のために動作しませんでした。 $(PublishDir)パラメータが正しい場所を指していませんでした。代わりに私が使用していた。

  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler Condition="'$(IsDesktopBuild)' != 'false'" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
    <AspNetCompiler Condition="'$(IsDesktopBuild)' == 'false'" VirtualPath="temp" PhysicalPath="$(OutDir)\_PublishedWebsites\$(ProjectName)" />
  </Target>

私は、溶液中で見えなかった私のソースコントロールにいくつかの古いフォルダを持っています。

あなたがすることはできませんASP.NET MVCアプリケーションを事前に構築します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top