C # Сбой сборки с использованием MSbuild без Visual Studio [duplicate]

Вы используете объект, содержащий ссылку нулевого значения. Таким образом, он дает пустое исключение. В примере строковое значение равно null, и при проверке его длины произошло исключение.

Пример:

string value = null;
if (value.Length == 0) // <-- Causes exception
{
    Console.WriteLine(value); // <-- Never reached
}

Ошибка исключения:

Необработанное исключение:

System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта. в Program.Main ()

349
задан stacker 21 October 2010 в 18:04
поделиться

16 ответов

Создание и публикация WAP не поддерживается, если VS не установлен. С учетом сказанного, если вы действительно не хотите устанавливать VS, вам нужно будет скопировать все файлы в %ProgramFiles32%\MSBuild\Microsoft\.

Вам также потребуется установить Web Deploy Tool . Я думаю, что это.

95
ответ дан Abel 26 August 2018 в 22:18
поделиться

При создании на сервере сборки / CI полностью отключите импорт Microsoft.WebApplication.targets, указав /p:VSToolsPath=''. Это, по существу, сделает условие следующей строки ложным:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

Вот как это делается в TeamCity:

16
ответ дан Alex R. 26 August 2018 в 22:18
поделиться

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 под вашим контролем источника.

69
ответ дан Andriy K 26 August 2018 в 22:18
поделиться

Чтобы ответить на заголовок вопроса (но не вопрос о выходе, который вы получаете):

Копирование следующей папки с вашего компьютера-разработчика на ваш сервер сборки исправляет это, если это просто веб-приложения

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications

Удалить x86 в зависимости от того, как ваша конструкция ломается. Если у вас есть другие типы проектов, вам, вероятно, потребуется скопировать всю папку msbuild.

190
ответ дан Chris S 26 August 2018 в 22:18
поделиться

Я попробовал кучу решений, но в конце концов этот ответ сработал для меня: https://stackoverflow.com/a/19826448/431522

Это в основном влечет за собой вызов MSBuild из каталога MSBuild вместо каталога Visual Studio.

Я также добавил каталог MSBuild на свой путь, чтобы упростить код.

15
ответ дан Community 26 August 2018 в 22:18
поделиться

Последний пакет 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, возможно, на самом деле будет менее общей для загрузки и меньше работы в конце.

39
ответ дан dansomething 26 August 2018 в 22:18
поделиться

Любой, кто пришел сюда для Visual Studio 2017. У меня была аналогичная проблема, и я не смог скомпилировать проект после обновления до 15.6.1. Мне пришлось устанавливать инструменты MSBulild, но все же ошибка была там.

Я смог исправить проблему, скопировав папку v14.0 с C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio в ту же папку, что и v15.0, и устранил все ошибки. Итак, теперь моя структура папок выглядит ниже, где обе папки содержат один и тот же контент.

1
ответ дан Habib 26 August 2018 в 22:18
поделиться

Кажется, новая версия 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/

5
ответ дан Huy Truong 26 August 2018 в 22:18
поделиться

Мое решение представляет собой сочетание нескольких ответов здесь.

Я проверил сервер сборки, и Windows7 / NET4.0 SDK был уже установлен, поэтому я нашел путь:

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets`

Однако в этой строке:

& lt; Импорт проекта = "$ (MSBuildExtensionsPath) \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets" />

$ ( MSBuildExtensionsPath) расширяется до C: \ Program Files \ MSBuild, у которого нет пути.

Поэтому я сделал, чтобы создать символическую ссылку, используя эту команду:

mklink / J "C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio" "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio"

Таким образом расширяет $ (MSBuildExtensionsPath) к допустимому пути, и никаких изменений не требуется в самом приложении, только на сервере сборки (возможно, можно создать syml чернила для каждой сборки, чтобы убедиться, что этот шаг не потерян и «задокументирован»).

2
ответ дан Kat Lim Ruiz 26 August 2018 в 22:18
поделиться

Вы также можете использовать пакет NuGet MSBuild.Microsoft.VisualStudio.Web.targets , ссылаясь на них в проектах (проектах) Visual Studio, а затем измените свои ссылки, как предлагает Andriy K.

60
ответ дан Kobi 26 August 2018 в 22:18
поделиться

Если вы переносите 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

Источник решения

13
ответ дан Luke 26 August 2018 в 22:18
поделиться

На основе этой записи здесь вы можете просто загрузить Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package и установить цели.

Это позволяет избежать установки Visual Studio на сервере сборки.

Я только что попробовал это сейчас и могу проверить, что он работает:

До:

Ошибка MSB4019: импортированный проект «C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets" не найден. Убедитесь, что путь в объявлении правильный, и что файл существует на диске.

После установки:

[Строит правильно]

Это, безусловно, гораздо лучшее решение, чем установка Visual Studio на сервере сборки.

56
ответ дан Mark Lagendijk 26 August 2018 в 22:18
поделиться

Я исправил это, добавив /p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120" в Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments

2
ответ дан MonoThreaded 26 August 2018 в 22:18
поделиться
9
ответ дан Simon_Weaver 26 August 2018 в 22:18
поделиться

Прямо сейчас, в 2017 году, вы можете установить переадресацию WebApplication с помощью MSBuildTools. Просто зайдите на эту страницу , которая будет загружать инструменты MSBuild 2017, а во время установки нажмите Web development build tools, чтобы установить эти цели:

Это приведет для установки отсутствующих библиотек в C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications по умолчанию

31
ответ дан SOReader 26 August 2018 в 22:18
поделиться

Я нашел это на MS connect :

Да, вам нужно установить Visual Studio 2010 на вашей машине для создания проектов баз данных. Для этого не требуется дополнительная лицензия Visual Studio.

Итак, это единственный вариант, который у меня есть сейчас.

6
ответ дан stacker 26 August 2018 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: