Пространство имен XML по умолчанию проекта должно быть пространством имен MSBuild XML

150

Я локально клонировал репо ASP.NET Core SignalR и попытался открыть решение в следующей среде.

IDE

Microsoft Visual Studio Enterprise 2015
Version 14.0.25431.01 Update 3
Microsoft .NET Framework
Version 4.6.01055

DOT NET CLI

λ dotnet --info
.NET Command Line Tools (1.0.0-preview2-1-003177)

Product Information:
 Version:            1.0.0-preview2-1-003177
 Commit SHA-1 hash:  a2df9c2576

Runtime Environment:
 OS Name:     Windows
 OS Version:  6.1.7601
 OS Platform: Windows
 RID:         win7-x64

В итоге я вижу много таких сообщений об ошибках:

..\Repos\SignalR\src\Microsoft.AspNetCore.SignalR\Microsoft.AspNetCore.SignalR.csproj : error: Пространство имен XML проекта по умолчанию должно быть пространством имен MSBuild XML. Если проект написан в формате MSBuild 2003, добавьте xmlns="http://schemas.microsoft.com/developer/msbuild/2003"его в элемент. Если проект был создан в старом формате 1.0 или 1.2, пожалуйста, преобразуйте его в формат MSBuild 2003. ..\Repos\SignalR\src\Microsoft.AspNetCore.SignalR\Microsoft.AspNetCore.SignalR.csproj

Я хочу знать, как это исправить правильно.

Дэвид Пайн
источник
Я просто предположил, что смогу, разве это предположение я не должен делать? Я надеюсь, что это обратно совместимо.
Дэвид Пайн
1
Ну, я получаю эту ошибку после разрешения VS2017 RTM для обновления формата проекта :-(
Simon_Weaver
я выложил похожую ошибку здесь .. stackoverflow.com/questions/58336983/… , однако в моем случае я начинаю с нового proj, а не пытаюсь открыть существующий.
joedotnot

Ответы:

212

Проекты, которые вы пытаетесь открыть, представлены в новом формате .NET Core csproj. Это означает, что вам нужно использовать Visual Studio 2017, которая поддерживает этот новый формат.

Изначально для .NET Core project.jsonвместо *.csproj. Однако после некоторого внутреннего обсуждения в Microsoft они решили вернуться к нему, csprojно с гораздо более чистым и обновленным форматом. Однако этот новый формат поддерживается только в VS2017.

Если вы хотите открыть проекты , но не хотите ждать до 7 марта го официального релиза VS2017, вы можете использовать Visual Studio - код.

DavidG
источник
Я очень знаком с историей, наверное, я просто предположил, что это сработает. Ошибка не кажется, что она слишком далеко ушла от царства возможного. Вы уверены, что на данный момент нет способа заставить это работать с минимальными усилиями, без битов Visual Studio 2017 RC ?
Дэвид Пайн
Не с VS2015, нет. Вот почему я предложил VS Code в качестве альтернативы. По крайней мере, у вас есть только неделя, чтобы дождаться выхода VS2017 :)
DavidG
Это правда, спасибо! Какая версия CLI DOT NET мне нужна, если я буду использовать VS Code ?
Дэвид Пайн
2
@ThePartyTurtle Чтобы быть справедливым, это попросило бы VS2015 понять формат файла, который он никогда не будет поддерживать.
DavidG
44

Я столкнулся с этой проблемой при открытии приложения Service Fabric GettingStartedApplication в Visual Studio 2015. Исходное решение было построено на .NET Core в VS 2017, и при открытии в 2015 году я получил ту же ошибку.

Вот шаги, которые я следовал, чтобы решить проблему.

  • Щелкните правой кнопкой мыши (загрузить Failed) проект и отредактируйте в visual studio.
  • Увидел следующую строку в теге Project: <Project Sdk="Microsoft.NET.Sdk.Web" >

  • Следуйте инструкциям, указанным в сообщении об ошибке, чтобы добавить xmlns="http://schemas.microsoft.com/developer/msbuild/2003"к этому тегу

Теперь это должно выглядеть так:

<Project Sdk="Microsoft.NET.Sdk.Web" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  • Перезагрузка проекта дала мне следующую ошибку (ваша может отличаться в зависимости от того, что включено в ваш проект)

Элемент «Update» <None> не распознан

  • Увидел, что элемент None имеет атрибут обновления, как показано ниже:

    <None Update="wwwroot\**\*;Views\**\*;Areas\**\Views">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </None>
  • Прокомментировал это как ниже.

    <!--<None Update="wwwroot\**\*;Views\**\*;Areas\**\Views">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </None>-->
  • На следующую ошибку: Версия в Ссылке Пакета не распознана Версия в элементе <PackageReference> не распознана

  • Увидел, что версия есть в csproj xml, как показано ниже (для краткости дополнительные строки PackageReference удалены)

  • Удалил атрибут Версия

    <PackageReference Include="Microsoft.AspNetCore.Diagnostics" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" />
  • Теперь я получаю следующее: VS Auto Upgrade

Бинго! Началось одностороннее обновление Visual Studio! Пусть VS сделает волшебство!

  • Проект загружен, но со ссылочными ошибками lib. введите описание изображения здесь

  • Исправлены ошибки ссылочной библиотеки по отдельности, путем удаления и замены в NuGet, чтобы проект заработал!

Надеюсь, это поможет другому путешественнику кода :-D

Jersey_Guy
источник
3
@ DavidG Это не пустая трата времени, так как не все проекты имеют ветку VS2015.
usr-bin-пить
Необходимо добавить, что вам нужно нажать «Показать все файлы» на панели инструментов обозревателя решений, чтобы снова увидеть папки проекта. Они будут отображаться «пунктирными», и вам нужно будет щелкнуть правой кнопкой мыши и выбрать каждый из них, а затем выбрать «Включить в проект», чтобы заново их
ввести
Это были именно те проблемы, с которыми я столкнулся .. шаг за шагом следовал за ними .. Спасибо !!
Самра
14

@ DavidG ответ правильный, но я хотел бы добавить, что если вы строите из командной строки, эквивалентное решение - убедиться, что вы используете соответствующую версию msbuild(в данном конкретном случае это должна быть версия). 15).

Запустите, msbuild /?чтобы узнать, какую версию вы используете, или where msbuildчтобы узнать, из какого места среда берет исполняемый файл, и при необходимости обновите (или укажите правильное местоположение) инструменты.

Загрузите последнюю версию MSBuild здесь .

Никита Г.
источник
6

Если вы получаете эту ошибку, пытаясь построить приложение .Net Core 2.0 на VSTS, убедитесь, что ваше определение сборки использует Hosted VS2017очередь агента.

Scotty.NET
источник
У меня была похожая проблема с проектом VS Azure Functions, нацеленным на .net framework, но все же сгенерировавшим файл csproj в основном формате. Это исправление сработало для меня.
ElliotSchmelliot
3

Я получал те же сообщения, пока работал только msbuild от powershell.

dotnet msbuild "./project.csproj" работал на меня.

you_rule
источник
Это в основном тот же ответ, что и этот . Вы должны использовать последнюю версию msbuild.
DavidG
0

если проект не большой,

1- изменить название папки проекта

2- сделать новый проект с тем же проектом (перед переименованием)

3 - добавить существующие файлы из старого проекта в новый проект (полностью одинаковые, те же папки, те же имена, ...)

4 - открыть новый файл проекта (как XML) и старый проект

5- скопируйте новый файл проекта (содержимое XML) и вставьте его в старый файл проекта

6 - удалить старый проект

7- переименуйте старую папку проекта в старое имя

Мухаммед Ахмад Абдулла
источник