是否可以仅将.NET Standard + .NET Core类/库构建为.NET Standard?

时间:2018-11-17 16:18:34

标签: c# .net

我有一个使用.NET Standard 2.0的类/库项目,并且我想直接在项目内部向其添加单元测试(因此更容易发现和耦合)。但是,因为每个测试框架都需要特定的平台,所以我别无选择,只能添加另一个框架,例如.NET Core。

仅由于需要在另一个项目(Unity项目,选择的框架是.NET Standard 2.0)中使用它,我才需要将该项目构建为.NET Standard。

是否可以将.NET Core添加到项目中,以便可以使用单元测试框架,但只能使用.NET Standard构建最终的dll?

还是我应该放弃并使用引用该项目的另一个项目来代替它?因为将单元测试直接嵌入项目中会更方便,以免在发生更改时忘记更新单元测试。

1 个答案:

答案 0 :(得分:0)

好吧,我想我已经找到了满足我特定需求的方法,而又没有破坏任何东西。

首先,将.NET Core添加到项目依赖项中,并添加测试框架(XUnit,NUnit,MSTest等)。然后,像往常一样添加测试,但要对单元测试功能及其包含的内容进行保护。

例如(使用XUnit),我们只想在调试版本中运行或启用单元测试:

#if DEBUG
using Xunit;
#endif

#if DEBUG
    [Fact]
    public void Test() {
        Assert.True(something);
    }
#endif

然后,在.csproj文件上,为依赖项添加保护:

<ItemGroup>
  <PackageReference Condition="'$(Configuration)'=='Debug'" Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
  <PackageReference Condition="'$(Configuration)'=='Debug'" Include="xunit" Version="2.4.1" />
  <PackageReference Condition="'$(Configuration)'=='Debug'" Include="xunit.runner.visualstudio" Version="2.4.1" />
</ItemGroup>

这将确保它不会链接到发行版本上的特定测试框架。