Teamcity通过添加DataOnStack结构来修改我自己的程序集

本文关键字:修改 我自己 自己的 程序集 结构 添加 DataOnStack Teamcity | 更新日期: 2023-09-27 18:06:30

为了确保编码标准,我进行了几个单元测试,使用反射来查看没有任何问题。其中一个是这样的:

[Test]
public void All_structs_should_be_immutable()
{
    var mutableStructs = typeof (Product).Assembly
        .GetTypes()
        .Where(type =>
                type.IsValueType && !type.IsCompilerGenerated() &&
                !type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).All(
                field => field.IsInitOnly))
        .OrderBy(type => type.FullName);
    foreach (var mutableStruct in mutableStructs)
    {
        Console.WriteLine(mutableStruct.FullName);
    }
    Assert.AreEqual("", string.Join(", ", mutableStructs.Select(x => x.FullName).ToArray()));
    Assert.AreEqual(0, mutableStructs.Count());
}

Product类在我自己的程序集中,与Jetbrains/Teamcity无关。

在使用Resharper运行测试时可以正常工作。但是当我在Teamcity中运行它时,我得到这个错误:

测试失败。预期字符串长度为0,但为51。字符串在索引0处不同

预期:

而是:" jetbrains . profile . core . instrumentation . dataonstack "

-----------^

在NUnit.Framework.Assert

。That(Object actual, iresolveconconstraint表达式,String message, Object[] args)

在NUnit.Framework.Assert

。AreEqual(Object expected, Object actual)

at Litium.Kamakura.UnitTest.CodingStandards. immutablestructs . all_structs_should_be_immutable () in c:'TeamCity'buildAgent'work'99395abb82d2a3b3'Test'Litium.Kamakura.UnitTest'CodingStandards'ImmutableStructs.cs:line 26

-------标准输出:-------

JetBrains.Profiler.Core.Instrumentation.DataOnStack

Teamcity如何以及为什么修改我的汇编?

Teamcity通过添加DataOnStack结构来修改我自己的程序集

似乎Teamcity的测试运行器(NUnit测试运行器?)被配置为使用dotCover/dotTrace运行。上面的一个分析器已经编辑了你的代码(记住他们是。net分析器,他们可以在JIT编译时注入代码,等等)。

根据这个bug跟踪,Jetbrains使用这个结构并且不会删除它,所以你将不得不使用一个解决方案。

请参阅Teamcity文档-您可以尝试使用不同的跑步者,或使用NCover收集覆盖,或完全禁用覆盖。