.NET 6 Preview 7: ошибки времени выполнения с общей математикой

Я не уверен, обнаружил ли я ошибку или делаю что-то не так, но этой проблемы нет в списке известных проблем .NET 6:

У меня есть проект модульного теста с одним файлом, который выглядит так:

      using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTest
{
    [TestClass]
    public class TestFoo
    {
        [TestMethod]
        public void Test()
        {
            var foo = new Foo();
        }
    }

    public class Foo : IAdditionOperators<Foo, Foo, Foo>
    {
        public static Foo operator +(Foo left, Foo right) => new();
    }
}

Тест не пройден из-за следующей ошибки времени выполнения:

      System.TypeLoadException: Virtual static method 'op_Addition' is not implemented on type 'UnitTest.Foo' from assembly 'UnitTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Но я очень четко реализовал оператор сложения. Фактически, когда я использую dotnet buildон компилируется нормально, пока я не удалю оператор сложения. Я что-то упускаю?

Вот мой файл проекта:

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

  <PropertyGroup>
    <EnablePreviewFeatures>true</EnablePreviewFeatures>
    <LangVersion>preview</LangVersion>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Runtime.Experimental" Version="6.0.0-preview.7.21377.19" />
  </ItemGroup>


  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
    <PackageReference Include="MSTest.TestAdapter" Version="2.2.3" />
    <PackageReference Include="MSTest.TestFramework" Version="2.2.3" />
    <PackageReference Include="coverlet.collector" Version="3.0.2" />
  </ItemGroup>

</Project>

1 ответ

Мне удалось исправить эту ошибку, переместив Fooв отдельный проект и построение этого проекта из командной строки. Затем мне пришлось запретить VS снова построить проект, сославшись на dll прямо из моего тестового проекта.

Я подозреваю, что VS 2019 не использует тот же компилятор, что и dotnet build, и что компилятор в VS 2019 не может зарегистрировать + оператор как член интерфейса для IAdditionOperators.

Другие вопросы по тегам