.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
.