VS Code Project - не удается найти файл Antlr3.runtime (.NET Core) - PullRequest
0 голосов
/ 30 апреля 2019

Итак, у нас есть проект, который я назову PrimaryProj для обсуждения. У нас также есть другой проект с кодом для NCalc, система оценки математических выражений .NET.

PrimaryProj использует ссылку на проект для NCalc, например:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <Platforms>x86;AnyCPU</Platforms>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <!--blah blah blah -->
  </PropertyGroup>

  <ItemGroup>
    <!-- <PackageReference Include="PrimaryProj.NCalc" Version="0.0.1" /> -->
    <ProjectReference Include="../../primary-proj/src/NCalc.csproj" />
  </ItemGroup>

</Project>

Как вы можете видеть, мы ранее использовали PackageReference для пакета NuGet, но теперь пытаемся использовать ProjectReference для нашего кода NCalc в другом проекте.

Теперь csproj NCalc все еще использует ссылки на пакеты, таким образом:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <Platforms>x86;AnyCPU</Platforms>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <!-- redacted product info here -->
    <Description>
      NCalc is a mathematical expressions evaluator in .NET. NCalc can parse any expression 
      and evaluate the result, including static or dynamic parameters and custom functions.
      This library is derived from the original NCalc, released under the MIT License,
      Copyright (c) 2011 Sebastien Ros.
    </Description>
    <Copyright>U.S. Army</Copyright>
    <!-- blah blah blah --->
  </PropertyGroup>

  <!-- <ItemGroup>
    <PackageReference Include="Antlr3.CodeGenerator" Version="3.5.2-beta2" />
    <PackageReference Include="Antlr3.Runtime" Version="3.5.2-beta2" />
  </ItemGroup> -->
  <ItemGroup>
    <PackageReference Include="Antlr3" Version="3.5.2-rc1" />
    <PackageReference Include="Antlr3.Runtime" Version="3.5.2-rc1" />
  </ItemGroup>

</Project>

Изначально он использовал / пытался использовать 3.5.2-бета2, но ни это, ни работа с rc1. Это сработало, когда у нас был файл csproj в PrimaryProj, использующий PackageReferences вместо ProjectReferences.

Теперь мы получаем ошибку:

Could not load file or assembly 'Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f' or one of its dependencies. The system cannot find the file specified.

Есть ли у PackageReferences и ProjectReferences проблемы с совместимостью? (например, если один проект использует ProjectReferences, проекты, на которые он ссылается, должны также?)

Это был огромный удар головы. Кроме того, единственное место, где мы когда-либо видели этот номер версии 3.5.0.2 в приведенной выше ошибке, - это какая-то ссылка ANTLRStringStream изнутри NCalc - мы можем использовать omnisharp-metadata, и именно здесь мы видим указанную версию.

Это все очень запутанно. Буду признателен за любую помощь, особенно если вы столкнетесь с этими типами .NET головных болей.

...