Приложение WPF создается в vs2k8, но не в командной строке w/msbuild

У меня довольно малое решение, которое включает приложение Windows WPF. Он построен отлично, когда построен из решения. Недавно я интегрировал проекты, содержащиеся в решении, в существующую, значительно более крупную сборку командной строки, которая использует 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

Я включил файл целей WinFX из .NET 3.5 в наш основной файл MSBuild.proj, поскольку он, похоже, не был включен нигде:

Это, похоже, не повлияло ни на что, и я все еще сталкиваюсь с ошибками. Насколько я могу судить, кажется, что пользовательские задачи сборки WPF, которые прекомпилируют файлы .xaml в файлы .cs, вставляют и проводят вверх ресурсы и т.д., Не работают, поэтому InitializeComponent и любые элементы управления, определенные в моих представлениях, не найдено. Я не понимаю, как почему, хотя... и пытаясь пробраться через миллионы результатов поиска, связанных с WPF, и MSBuild не достает меня никуда.

UPDATE:

Добавление файла Microsoft.WinFX.targets в файл .csproj похоже, что это сработает. Тем не менее, это приводит к тому, что проект не может быть создан в Visual Studio 2008. Почему-то VS включает в себя эти цели для вас... но я не уверен, как это сделать. Кто-нибудь знает больше о том, как VS строит проекты WPF? Есть ли где-нибудь файл сборки, который импортирует соответствующие цели?

5 ответов

Отправить msbuild файл решения вместо вашего .csproj файла иногда может помочь:

msbuild.exe yoursolution.sln

Кроме того, сам файл devenv.exe предлагает сборку в командной строке, которая должна быть эквивалентна опыту in-IDE:

devenv.exe /build yoursolution.sln


Ознакомьтесь с этим разделом SDK MSDN, который называется Создание приложений WPF и убедитесь, что вы делаете все, что вам нужно.


Если вы спрашиваете, работает ли визуальная студия, почему не msbuild?

Тогда, скорее всего, вы используете неправильную версию msbuild. Вам понадобится msbuild 4 для создания проектов .net 4.

Также см. следующую ссылку http://blogs.digitaldeposit.net/saravana/post/2011/02/08/CS0103-The-name-e28098InitializeComponente28099-does-not-exist-in-the-current-context.aspx


Я понимаю, что изменения уже ответили на вопрос, но я решил включить в него больше информации с ответом и закончил предложение для вашего последнего отредактированного вопроса, связанного с Visual Studio.

Отредактируйте файл csproj и поместите строку, близкую к этой строке, рядом с строкой с "Microsoft.CSharp.targets" в ней (вместо этого может быть MSBuildToolsPath):

См. Создание приложения Windows Presentation Foundation, Файлы проекта MSBuild для WPF и MSBuild.Targets Files.

Цели определяют, как проекты фактически построены и зависят от обоих свойства и предметы. WPF приложение должно иметь как специфической для конкретной страны цели и Конкретная цель WPF:

Цели - это отдельные файлы, которые заканчиваются с расширением .targets. целевые файлы, которые включены в .NET Framework 3.0 установлены в следующее местоположение:

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

Конкретная для языка целевая логика построения языковых исходный код. Специфические для языка Цель для С# - Microsoft.CSharp.targets и Microsoft.VisualBasic.targets для Visual Basic. Обе эти цели извлекать и распространять Microsoft.Common.targets target, который выполняет основную часть общего, независимые от языка работы.

Насколько "Visual Studio может построить это", я бы предположил, что эта визуальная студия включает это за кулисами. Вы можете доказать это себе так или иначе, временно переименовав C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.target и увидев, может ли визуальная студия больше создавать.


Не видя файл проекта напрямую, это трудно сказать наверняка, но похоже, что в вашем проекте отсутствуют разделы <page...< code=""> include.</page...<>

<p>Например, убедитесь, что вы определяете свой MainWindow, который у вас есть:</p> <pre class="prettyprint linenums">&lt;itemgroup&gt; &lt;page include="MainWindow.xaml"&gt; &lt;compile include="MainWindow.xaml.cs"&gt; ... Other items... &lt;/compile&gt;&lt;/page&gt;&lt;/itemgroup&gt;</pre> <p>Это, в дополнение к вашему Import WinFX.targets, должно позволить этому работать правильно.</p> <p>В настоящее время ваши ошибки указывают на отсутствие тегов "Страница", но теги "Компиляция" для кода-кода все на месте.</p>

licensed under cc by-sa 3.0 with attribution.