【问题标题】:Visual Studio 2017 build of project doesn't require references. New vs Old project file syntax项目的 Visual Studio 2017 构建不需要引用。新旧项目文件语法
【发布时间】:2020-05-27 18:58:40
【问题描述】:

两个版本的项目文件似乎会导致 VS2017 (MSBUILD 15.0) 构建的行为不同。在第一个项目文件案例(较新的样式?)中,我实际上不必添加所有依赖项。通常在代码文件中,当您“使用某物”时,您必须在项目中包含对“某物”的引用。但不适用于下面的这种 Project File 1 样式。我可以通过“使用”我的代码文件中的引用来包含不在项目引用中的内容。 Visual Studio 会很好地构建它。但是当我运行命令行 msbuild 时,缺少的引用会导致构建失败。这个失败是我在使用第二种类型的 Project File 2 时也会在 Visual Studio 中遇到的传统问题。 IE。传统的“对不起,但如果你正在‘使用’某些东西,你需要在你的项目中引用”。 Visual Studio 101 自什么... 2003?

因此,Visual Studio 在某种程度上变得更加智能。我认为在某种程度上打破了这里的基本 effing 规则,但无论如何。

当我查看构建的诊断(即最详细的)输出时,很明显存在一些差异。一方面,输出格式不同(新样式在变量和值之间使用伪标签更好地格式化事物)。它也显然具有略微不同的环境/任何变量。例如,它的“Resolve*”值集的值略有不同。我只是假设 VS 正在设置一些环境变量(我在输出中看不到任何命令行参数),这导致 msbuild 行为不同。所有的 msbuild 工具和 VS 版本的东西看起来都一样。

那么,我如何使 VS 和 msbuild 的行为相同?是否有特定的环境变量或命令行参数可以让 msbuild 像 VS 一样“智能”?还是告诉 VS 按照传统规则行事?还是我必须重做所有项目文件才能成为旧版本?

项目文件 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>

【问题讨论】:

    标签: .net visual-studio msbuild


    【解决方案1】:

    我想通了。这是不同的项目文件。较新的有这个

    <Project Sdk="Microsoft.NET.Sdk">
    

    导致 VS 执行生成这些文件的还原

    PS F:\Depots\blah\Source\obj> ls

    Debug
    project.assets.json
    blah.csproj.nuget.cache
    blah.csproj.nuget.g.props
    blah.csproj.nuget.g.targets
    

    该还原神奇地将所有 DLL 放入目标文件夹,因此构建工作正常。

    在新的/全新的 VS 之前的构建中,这些东西不存在并且 msbuild 失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-02
      • 2019-02-01
      • 2018-03-03
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多