Подтвердить что ты не робот

Как обновить файлы csproj с помощью VS2017

VS2017 до сих пор правильно преобразовал несколько проектов на основе project.json/.xproj в новый формат .csproj.

Я также хотел бы использовать новый формат .csproj со старыми .csproj проектами, которые ранее ориентировались только на .NET Framework (т.е. они не работали с CLI dnx/dotnet).

Кажется, что даже если проект по-прежнему будет ориентирован только на .NET Framework, преимущества <PackageReference> и легко редактируемого файла .csproj выглядят достойными (надеюсь, не слишком большими) проблемами.

Это возможно напрямую с Visual Studio 2017?

Если нет, какие шаги должны выполняться вручную?

4b9b3361

Ответ 1

Я редактирую свой ответ, чтобы было ясно, что вам не нужно обновлять файл .csproj. Как прокомментировал Дрю ниже, в этом есть свои преимущества. Тем не менее, VS2017 продолжит отлично работать с классическим файлом csproj. Кроме того, в VS2017 нет ничего, что могло бы выполнить обновление за вас. Если вы хотите воспользоваться новым форматом, вам может помочь обзор ниже.

Обновление файла .csproj до нового формата Visual Studio 2017 легко для простых библиотек классов или консольных проектов.

Если вы не используете контроль версий, перед началом работы обязательно сделайте резервную копию файла csproj, а также Properties/AssemblyInfo.cs и packages.config. Новый файл csproj великолепен. Во многих проектах я заменил сотни строк кода дюжиной или около того. Однако, поскольку Visual Studio 2017 продолжает поддерживать предыдущие файлы csproj, это может быть причиной преждевременной оптимизации. Если у вас есть решение, содержащее десятки проектов, множество пакетов NuGet и любые настройки для csproj, вы, вероятно, предпримете ненужный проект make work.

Замените все содержимое файла .csproj соответствующим кодом следующим образом.

Библиотека классов

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
</Project>

Консольное приложение

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
</Project>

Измените атрибут <TargetFramework> на требуемую версию .NET, такую как net452, net46, net461 и т.д.

По умолчанию весь код в папке вашего проекта будет подобран компилятором. Если у вас есть код вне вашей папки проекта, вы должны явно ссылаться на него так же, как в предыдущих версиях Visual Studio и csproj.

После внесения вышеуказанных изменений загрузите ваше решение в Visual Studio 2017. На этом этапе должны быть собраны самые основные проекты. Если нет, вам, вероятно, нужно добавить отсутствующие ссылки на сборки или проекты. Добавление ссылок очень похоже на это в предыдущих версиях Visual Studio. Выберите свой проект в обозревателе решений, щелкните правой кнопкой мыши Dependencies и выберите Add Reference. Добавьте любые ссылки на Framework или Project, которые вам не хватает.

Попытайтесь построить ваше решение/проект снова. Вы можете получить ошибки о дубликатах атрибутов. Эта ошибка вызвана тем, что атрибуты, ранее определенные в AssemblyInfo.cs, были перемещены в файл csproj. Удаление файла AssemblyInfo.cs, находящегося в папке Properties, должно устранить эти ошибки. Перед удалением AssemblyInfo.cs вы должны переместить любые данные, которые вы определили. Большинство атрибутов можно ввести в разделе информации о пакете файла вашего проекта. Щелкните правой кнопкой мыши на имени вашего проекта, выберите страницу пакета и введите любые данные, которые ранее были определены в вашем файле AssemblyInfo.cs. Сюда входят такие элементы, как версия сборки, автор, авторские права и т.д.

Ниже приведен снимок экрана, на котором показан предыдущий шаг.

enter image description here

Если вы используете какие-либо пакеты NuGet в своем проекте, вам также необходимо переместить их в новый формат. До Visual Studio 2017 NuGet полагался на файл с именем Packages.config в корневом каталоге вашего проекта в дополнение к ссылкам в csproj. Чтобы перенести ссылки на пакеты NuGet, щелкните правой кнопкой мыши свое решение и загрузите диспетчер пакетов Nuget. После загрузки в верхнем правом углу щелкните значок, и загрузятся параметры диспетчера пакетов NuGet. Выберите General. В разделе Управление пакетами измените параметр Default package management format на PackageReference. На этом этапе вам придется вручную добавить все ваши пакеты NuGet обратно в ваше решение. Вы можете найти все пакеты в файле packages.config в корневой папке проекта. После того, как вы добавили все пакеты обратно, вы можете удалить файл packages.config.

Ответ 2

Я создал инструмент для этого, который работает с файлами csproj: https://github.com/hvanbakel/CsprojToVs2017

Вы можете просто запустить его на csproj, и он преобразует файл и создаст резервную копию старого.

Ответ 3

Обновление: ссылка на инструмент ниже не работает, но в VS2017 15.7 эта функция встроена в Visual Studio.

Примечание: это только обновляет ссылочный механизм NuGet. Он не изменяется на новый тип csproj.


Есть замечательный инструмент, который автоматически конвертирует проекты, использующие package.config или project.json, в PackageReference.

https://marketplace.visualstudio.com/items?itemName=TaylorSouthwickMSFT.NuGetPackagetoProjectjsonConverter

  1. Установите его в Visual Studio и щелкните правой кнопкой мыши на решении

  2. После установки расширения откройте свое решение и щелкните правой кнопкой мыши решение в обозревателе решений и нажмите Обновить до пакета Ссылки

  3. После этого проект будет преобразован, как показано ниже. Настоятельно рекомендуется выполнить это в каталоге с управлением исходным кодом, чтобы можно было легко отменить, если что-то пойдет не так.

enter image description here