Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.
Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).
Пример
var name = p?.Spouse?.FirstName;
эквивалентен:
if (p != null)
{
if (p.Spouse != null)
{
name = p.Spouse.FirstName;
}
}
В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.
В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.
Для получения дополнительной информации: Операторы с нулевым условием
Создание и публикация WAP не поддерживается, если VS не установлен. С учетом сказанного, если вы действительно не хотите устанавливать VS, вам нужно будет скопировать все файлы в %ProgramFiles32%\MSBuild\Microsoft\
.
Вам также потребуется установить Web Deploy Tool . Я думаю, что это.
При создании на сервере сборки / CI полностью отключите импорт Microsoft.WebApplication.targets
, указав /p:VSToolsPath=''
. Это, по существу, сделает условие следующей строки ложным:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
Вот как это делается в TeamCity:
UPD: с VS2017 в Work Tools есть рабочая нагрузка, которая полностью устраняет эту проблему. См. Ответ @SOReader.
Если вы предпочитаете ничего не изменять на сервере сборки, и вы все еще хотите, чтобы проект строился прямо из исходного элемента управления, может быть хорошей идеей поставить требуемые двоичные файлы под контролем источника. Вам нужно будет изменить раздел импорта в файле проекта, чтобы он выглядел следующим образом:
<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" />
<Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
Первая строка - это фактический импорт из нового местоположения, относящегося к каталогу решений. Второй вариант - отключенная версия (Condition="false"
) исходной строки, которая позволяет Visual Studio по-прежнему считать ваш проект действительным проектом веб-приложений (это трюк, который сам VS 2010 SP1).
Не забудьте скопировать папку C:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplications
в BuildTargets
под вашим контролем источника.
Чтобы ответить на заголовок вопроса (но не вопрос о выходе, который вы получаете):
Копирование следующей папки с вашего компьютера-разработчика на ваш сервер сборки исправляет это, если это просто веб-приложения
C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications
blockquote>Удалить x86 в зависимости от того, как ваша конструкция ломается. Если у вас есть другие типы проектов, вам, вероятно, потребуется скопировать всю папку msbuild.
Я попробовал кучу решений, но в конце концов этот ответ сработал для меня: https://stackoverflow.com/a/19826448/431522
Это в основном влечет за собой вызов MSBuild из каталога MSBuild вместо каталога Visual Studio.
Я также добавил каталог MSBuild на свой путь, чтобы упростить код.
Последний пакет Windows SDK, как упоминалось выше, в дополнение к «Распространяемый пакет Microsoft Visual Studio 2010 (интегрированный) распространяемый пакет» для Microsoft.WebApplication.targets и «Команда Microsoft Visual Studio System 2008 Database Edition GDR R2 " для Microsoft.Data.Schema.SqlTasks.targets должна облегчить необходимость установки Visual Studio 2010. Тем не менее, установка VS 2010, возможно, на самом деле будет менее общей для загрузки и меньше работы в конце.
Любой, кто пришел сюда для Visual Studio 2017. У меня была аналогичная проблема, и я не смог скомпилировать проект после обновления до 15.6.1. Мне пришлось устанавливать инструменты MSBulild, но все же ошибка была там.
Я смог исправить проблему, скопировав папку v14.0
с C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio
в ту же папку, что и v15.0
, и устранил все ошибки. Итак, теперь моя структура папок выглядит ниже, где обе папки содержат один и тот же контент.
Кажется, новая версия msbuild не поставляется с Microsoft.WebApplication.targets. Чтобы исправить это, необходимо обновить файл csproj следующим образом:
1) Отредактируйте веб-приложение csproj (щелкните правой кнопкой мыши). Найдите раздел в csproj в нижней части относительно инструментов сборки. Это должно выглядеть так.
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
2) Вам нужно добавить одну строку VSToolsPath под тегом VisualStudioVersion, чтобы она выглядела так:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<!--Add the below line to fix the project loading in VS 2017 -->
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<!--End -->
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
Ссылка ссылки: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/
Мое решение представляет собой сочетание нескольких ответов здесь.
Я проверил сервер сборки, и Windows7 / NET4.0 SDK был уже установлен, поэтому я нашел путь:
C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets`
blockquote>Однако в этой строке:
& lt; Импорт проекта = "$ (MSBuildExtensionsPath) \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets" />
blockquote>$ ( MSBuildExtensionsPath) расширяется до C: \ Program Files \ MSBuild, у которого нет пути.
Поэтому я сделал, чтобы создать символическую ссылку, используя эту команду:
mklink / J "C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio" "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio"
blockquote>Таким образом расширяет $ (MSBuildExtensionsPath) к допустимому пути, и никаких изменений не требуется в самом приложении, только на сервере сборки (возможно, можно создать syml чернила для каждой сборки, чтобы убедиться, что этот шаг не потерян и «задокументирован»).
Вы также можете использовать пакет NuGet MSBuild.Microsoft.VisualStudio.Web.targets , ссылаясь на них в проектах (проектах) Visual Studio, а затем измените свои ссылки, как предлагает Andriy K.
Если вы переносите Visual Studio 2012 на 2013 год, откройте файл проекта .csproj с edior. и проверить элемент ToolsVersion элемента «Project».
Измените его значение с 4.0 до 12.0
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" ...
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" ...
Или Если вы создаете с помощью msbuild, просто укажите свойство VisualStudioVersion
msbuild /p:VisualStudioVersion=12.0
blockquote>
На основе этой записи здесь вы можете просто загрузить Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package и установить цели.
Это позволяет избежать установки Visual Studio на сервере сборки.
Я только что попробовал это сейчас и могу проверить, что он работает:
До:
Ошибка MSB4019: импортированный проект «C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets" не найден. Убедитесь, что путь в объявлении правильный, и что файл существует на диске.
blockquote>После установки:
[Строит правильно]
Это, безусловно, гораздо лучшее решение, чем установка Visual Studio на сервере сборки.
Я исправил это, добавив /p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"
в Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments
Это все, что вам нужно. Только 103 МБ. Не устанавливайте все
[/g0]
Прямо сейчас, в 2017 году, вы можете установить переадресацию WebApplication с помощью MSBuildTools. Просто зайдите на эту страницу , которая будет загружать инструменты MSBuild 2017, а во время установки нажмите Web development build tools
, чтобы установить эти цели:
Это приведет для установки отсутствующих библиотек в C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications
по умолчанию
Я нашел это на MS connect :
Да, вам нужно установить Visual Studio 2010 на вашей машине для создания проектов баз данных. Для этого не требуется дополнительная лицензия Visual Studio.
blockquote>Итак, это единственный вариант, который у меня есть сейчас.