62

ASP.NET MVC Beta から 1.0 にアップグレードし、MVC プロジェクトに次の変更を加えました (RC リリース ノートに記載されています)。

<Project ...>
  ...
  <MvcBuildViews>true</MvcBuildViews>
  ...
  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
  </Target>
  ...
</Project>

ビルドはローカル開発ボックスで正常に実行されますが、TFS 2008 ビルドでは「タイプ 'xxx.MvcApplication' を読み込めませんでした」で失敗します。以下のビルド ログを参照してください。

...
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 ビルドの問題を解決するにはどうすればよいですか?

4

9 に答える 9

181

実は、この問題にはもっと良い解決策があります。VS/TFS 2010 でテストしましたが、VS/TFS 2008 でも動作するはずです。

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

MVC チームと協力してプロジェクト テンプレートを更新し、このアプローチをカスタム ターゲットと共に使用するようにします (AfterBuild をオーバーライドするのではなく)。

How to Turn on Compile-time View Checking for ASP.NET MVC projects in TFS Build 2010に関するブログ投稿を公開しました。

于 2010-04-19T20:53:36.557 に答える
17

この問題は、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 ビルド サーバーの両方でビューをコンパイルできるようになります。

于 2009-07-08T14:24:50.383 に答える
3

Web .csproj をビルドしたとき、Jim Lamb のソリューションは機能しませんでした

/p:UseWPP_CopyWebApplication=true;PipelineDependsOnBuild=False

ターゲットが実行されAfterBuildていて、アプリケーションがまだ にコピーされてWebProjectOutputDirいないためです。(ところで、これらのプロパティを Web プロジェクトのビルドに渡します。ビルドで OutDir フォルダーを作成し、圧縮に適したバイナリと cshtml ファイルのみを作成します。つまり、インプレース ビルドではありません)

この問題を回避し、彼の最初のターゲットの意図を尊重するために、私は次のことを行いました。

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

<Target Name="MvcBuildViews" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
于 2012-11-27T17:07:21.600 に答える
1

.csproj ファイルで次の設定を変更したことを意味していると思います。

<MvcBuildViews>true</MvcBuildViews>

質問に投稿した設定には触れないでください。ローカル マシンで動作する場合は、当然、ASP.NET MVC アプリケーションを事前にビルドできます。

TFS ビルド環境とローカル VS マシンの違いを追跡する必要があると思います。たぶん、別のバージョンの MsBuild などを使用している可能性があります。

詳細な出力で両方のビルドを実行してみて、2 つを比較して違いを確認してください。

于 2009-04-20T16:14:29.813 に答える
0

これはまだテスト中ですが、false / trueをタグセットから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のセットアップを取得したら、TFSBuild.projファイルに追加したステップをTFSに投稿しようとします。

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <MvcBuildViews>true</MvcBuildViews>
    <DebugSymbols>true</DebugSymbols>
    ....
于 2009-05-28T19:15:33.933 に答える
0

ソース管理に、ソリューションに表示されていない古いフォルダーがいくつかありました。

于 2011-02-16T20:19:13.537 に答える
0

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

于 2009-06-04T04:28:03.593 に答える
-6

ASP.NET MVC アプリケーションを事前にビルドすることはできません。

于 2009-04-16T17:34:52.383 に答える