5

私は、WPF Windows アプリケーションを含むかなり小さなソリューションを持っています。ソリューションからビルドすると、完全にうまくビルドされます。最近、ソリューションに含まれるプロジェクトを、MSBuild を使用する既存のはるかに大規模なコマンド ライン ビルドに統合しました。ただし、コマンド ラインからビルドすると、次のエラーが発生します。

MainWindow.xaml.cs(12,4): error CS0103: The name 'InitializeComponent' does not exist in the current context
View\EngineMonitorView.xaml.cs(12,4): error CS0103: The name 'InitializeComponent' does not exist in the current context
View\HostingEngineView.xaml.cs(12,4): error CS0103: The name 'InitializeComponent' does not exist in the current context
View\MainView.xaml.cs(13,4): error CS0103: The name 'InitializeComponent' does not exist in the current context
View\MainView.xaml.cs(17,52): error CS0103: The name 'gView' does not exist in the current context
View\PerformanceCounterView.xaml.cs(22,4): error CS0103: The name 'InitializeComponent' does not exist in the current context
View\PerformanceCounterView.xaml.cs(117,22): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(118,20): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(127,4): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(138,5): error CS0103: The name 'txtScale' does not exist in the current context
View\PerformanceCounterView.xaml.cs(179,5): error CS0103: The name 'txtLast' does not exist in the current context
View\PerformanceCounterView.xaml.cs(180,5): error CS0103: The name 'txtMin' does not exist in the current context
View\PerformanceCounterView.xaml.cs(181,5): error CS0103: The name 'txtMax' does not exist in the current context
View\PerformanceCounterView.xaml.cs(189,5): error CS0103: The name 'txtAverage' does not exist in the current context
View\PerformanceCounterView.xaml.cs(250,4): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(251,4): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(253,27): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(255,27): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(264,4): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(269,4): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(274,4): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(279,4): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(293,5): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(303,5): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(318,5): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(325,5): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\PerformanceCounterView.xaml.cs(342,4): error CS0103: The name 'cnvsCounterGrid' does not exist in the current context
View\ServerMonitorView.xaml.cs(12,4): error CS0103: The name 'InitializeComponent' does not exist in the current context
View\ServerTreeView.xaml.cs(12,4): error CS0103: The name 'InitializeComponent' does not exist in the current context
View\ServiceDetailView.xaml.cs(12,4): error CS0103: The name 'InitializeComponent' does not exist in the current context
View\ServiceMonitorView.xaml.cs(12,4): error CS0103: The name 'InitializeComponent' does not exist in the current context

.NET 3.5 の WinFX ターゲット ファイルをルートの MSBuild .proj ファイルに含めました。他の場所には含まれていないようです。

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

ただし、それは何にも影響していないようで、まだエラーが発生しています。私が知る限り、.xaml ファイルを .cs ファイルにプリコンパイルしたり、リソースを埋め込んだり接続したりするカスタム WPF ビルド タスクが実行されていないようです。見つかりません。しかし、その理由については途方に暮れています...そして、WPFとMSBuildに関連する無数の検索結果を調べようとしても、どこにも行きません.

アップデート:

Microsoft.WinFX.targets を .csproj ファイルに追加するとうまくいくようです。ただし、そうすると、プロジェクトが Visual Studio 2008 内でビルドできなくなります。どういうわけか、VS にはこれらのターゲットが含まれていますが、その方法がわかりません。VS が WPF プロジェクトをビルドする方法について詳しく知っている人はいますか? 適切なターゲットをインポートするマスター ビルド ファイルがどこかに隠れていますか?

4

5 に答える 5

5

.csproj ファイルの代わりにソリューション ファイルを msbuild に送信すると、次のことが役立つ場合があります。

msbuild.exe yoursolution.sln

また、devenv.exe 自体は、IDE 内のエクスペリエンスと同等であるはずのコマンドライン ビルドを提供します。

devenv.exe /build yoursolution.sln
于 2009-11-11T10:05:13.800 に答える
2

WPFアプリケーションの構築と呼ばれるMSDNSDKのこのセクションをチェックして、必要なすべてを実行していることを確認してください。

于 2009-11-04T01:38:19.793 に答える
1

あなたが尋ねているなら、Visual Studio が動作するのに msbuild しないのはなぜですか?

答えは、間違ったバージョンの msbuild を使用している可能性が最も高いです。.net 4 プロジェクトをビルドするには msbuild 4 が必要です。

次のリンクも参照してください

于 2011-06-02T01:50:12.150 に答える
1

プロジェクト ファイルを直接見ないと、確実に判断するのは困難ですが、プロジェクトに<Page...インクルード セクションがないようです。

たとえば、MainWindow を定義する場所で、次のことを確認してください。

<ItemGroup>
   <Page Include="MainWindow.xaml" />
   <Compile Include="MainWindow.xaml.cs" />
   ... Other items...

これにより、WinFX.targets のインポートに加えて、これが適切に機能するようになります。

現在、エラーは「ページ」タグが欠落していることを示唆していますが、コード ビハインドの「コンパイル」タグはすべて配置されています。

于 2009-11-09T19:14:50.373 に答える
0

編集は既に質問に回答していることに気付きましたが、ここに回答を含む詳細情報を含めることにし、最後に編集された Visual Studio 関連の質問に対する提案を終了しました。

csproj ファイルを編集し、次のような行を末尾近くの "Microsoft.CSharp.targets" が含まれる行の近くに配置します (代わりに MSBuildToolsPath である可能性があります)。

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

「 Windows Presentation Foundation アプリケーションのビルド」、「WPF 用の MSBuild プロジェクト ファイル」、および「MSBuild .Targets ファイル」を参照してください。

ターゲットは、プロジェクトが実際にどのように構築されるかを決定し、プロパティとアイテムの両方に依存します。WPF アプリケーションには、言語固有のターゲットと WPF 固有のターゲットの両方が必要です。

ターゲットは、拡張子が .targets の個別のファイルです。.NET Framework 3.0 に含まれるターゲット ファイルは、次の場所にインストールされます。

%WINDIR%\Microsoft.NET\Framework\vX.XX

言語固有のターゲットには、言語固有のソース コードをビルドするためのロジックが含まれています。C# の言語固有のターゲットは Microsoft.CSharp.targets で、Visual Basic の場合は Microsoft.VisualBasic.targets です。これらのターゲットは両方とも、共通の言語に依存しないビルド作業の大部分を実行する Microsoft.Common.targets ターゲットから派生し、拡張します。

「どうして Visual Studio がこれをビルドできるのか」という限りでは、Visual Studio はこれを舞台裏で組み込んでいると思います。一時的に C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.target の名前を変更し、Visual Studio がビルドできるかどうかを確認することで、何らかの方法でそれを証明できます。

于 2010-07-27T14:39:41.973 に答える