Две версии файлов проекта, похоже, приводят к разному поведению сборок VS2017 (MSBUILD 15.0). В первом случае файла проекта (более новый стиль?) Мне фактически не нужно добавлять все зависимости. Обычно в файле кода, когда вы «используете что-то», вы должны включить ссылку на «что-то» в проекте. Но НЕ с этим стилем Project File 1 ниже. Я могу включить с помощью «using» ссылку в свой файл кода на то, чего НЕТ в ссылках проекта. Visual Studio отлично его построит. Но затем, когда я запускаю командную строку msbuild, отсутствующая ссылка вызывает сбой сборки. Этот сбой является традиционным, что я также получил бы в Visual Studio при использовании второго типа Project File 2 . Ie. традиционное «извините, но если вы« используете »что-то, вам понадобится ссылка в вашем проекте». Visual Studio 101 с каких ... 2003?
Итак, Visual Studio как-то умнее. В некотором смысле, я думаю, что это нарушает основные c правила здесь, но неважно. что есть некоторые отличия. Во-первых, другой формат вывода (новый стиль немного лучше форматирует псевдо-вкладки между переменными и значениями). Он также явно имеет немного другую среду / любые переменные. Например, он имеет несколько другие значения для набора значений «Разрешить *». Я просто предполагаю, что VS устанавливает некоторые переменные среды (я не вижу никаких параметров командной строки в выходных данных), что приводит к другому поведению msbuild. Все инструменты msbuild и версии VS выглядят одинаково.
Итак, как мне заставить VS и msbuild работать одинаково? Есть ли конкретная переменная среды или аргумент командной строки, чтобы msbuild был таким же «умным», как VS? Или сказать VS вести себя в соответствии с традиционным правилом? Или мне нужно go повторить все мои файлы проекта, чтобы они были более старой версией?
Файл проекта 1 : (новый стиль?)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net4.6.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="blah" />
Файл проекта 2 : (традиционный / старый стиль)
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
...snip...
ItemGroup>
<ProjectReference Include="blah2">
<Project>{GUID SNIPPED}</Project>
<Name>blahs</Name>