.net MSBuild 15.0:警告MSB3245:未能重新解析此引用。需要一个文件,但得到了目录"\“银行标识代码”;

.net MSBuild 15.0:警告MSB3245:未能重新解析此引用。需要一个文件,但得到了目录"\“银行标识代码”;,.net,visual-studio,msbuild,visual-studio-2017,.net,Visual Studio,Msbuild,Visual Studio 2017,我正在尝试将Visual Studio 2015解决方案迁移到VS 2017(15.4.1)。尽管这些项目是从VisualStudio中编译的,但如果我尝试使用MSBuild v15从命令行生成各个项目,则对于引用解决方案中不同项目的任何项目,编译都会失败 MSBuild输出以下警告,我认为这表明找不到引用的项目: c:\program files(x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Com

我正在尝试将Visual Studio 2015解决方案迁移到VS 2017(15.4.1)。尽管这些项目是从VisualStudio中编译的,但如果我尝试使用MSBuild v15从命令行生成各个项目,则对于引用解决方案中不同项目的任何项目,编译都会失败

MSBuild输出以下警告,我认为这表明找不到引用的项目:

c:\program files(x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(1988,5):警告MSB3245:无法解析此引用。需要一个文件,但得到目录“D:\TestSolution\ClassLibrary2\bin”。如果代码需要此引用,则可能会出现编译错误。[D:\TestSolution\ClassLibrary2\ClassLibrary2.csproj]

我使用以下命令启动MSBuild:

"c:\program files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe"
    "d:\TestSolution\ClassLibrary2\ClassLibrary2.csproj"
复制步骤:

  • 在Visual Studio 2017中,创建一个包含两个类库的新解决方案,
    ClassLibrary1
    ClassLibrary2
  • ClassLibrary2
    参考
    ClassLibrary1
    ,并确保代码链接到
    ClassLibrary1
    Class1
    。通过右键单击解决方案资源管理器中项目的“依赖项”节点并从上下文菜单中选择“添加引用…”来添加引用
  • 从Visual Studio编译项目,以验证它是否从Visual Studio编译
  • 使用上一个命令从命令行启动MSBuild。建筑物在发出警告后发生故障
  • 除了警告之外,还有以下错误消息:

    cs(7,26):错误CS0246:找不到类型或命名空间名称“ClassLibrary1”(是否缺少using指令或程序集引用?[d] :\TestSolution\ClassLibrary2\ClassLibrary2.csproj]

    ClassLibrary1的项目文件:

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

    我在这里做错了什么?

    嘿,史蒂文,我刚在当地试过,效果很好。是否安装了最新的VS 2017和MSBuild?如何添加引用、使用解决方案表示项目之间的依赖关系或向项目添加引用?如果您在解决方案中添加引用(右键单击您的解决方案->属性->公共属性->项目依赖项),那么您将生成单个项目,您将得到该错误。顺便说一句,请尝试清理生成,然后重新生成。@Leo MSFT:我通过右键单击解决方案资源管理器中项目的“依赖项”节点并从上下文菜单中选择“添加引用…”添加了引用。清洗溶液没有什么区别。错误仍然存在。@Steven,无法重现。如何使用ClassLibrary1添加名称空间
    在ClassLibrary2的Class1中?@Leo MSFT:这当然不是代码问题。同一编译器的MSBuild kick。但是,我在测试项目中通过以下方式解决了这个问题:1。从项目中删除/bin和/obj文件夹,2。在VS中打开解决方案(可能进行了包还原,并重新创建了bin和obj文件夹),3。关闭解决方案,4。运行MSBuild命令。这解决了测试项目中的问题,但不幸的是,实际项目中没有。我甚至尝试了
    dotnet restore
    ,但问题仍然存在于实际项目中。现在的问题是,我不能在测试项目中重现那个精确的问题
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
      <ItemGroup>
        <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" />
      </ItemGroup>
    </Project>
    
    using System;
    
    namespace ClassLibrary2
    {
        public class Class1
        {
            private readonly ClassLibrary1.Class1 instance = new ClassLibrary1.Class1();
    
            public string Test() => instance.ToString();
        }
    }