反映到单元测试项目中时缺少组件

时间:2019-09-02 00:33:11

标签: c# reflection .net-core mstest

从控制台应用程序反映到单元测试程序集(System.Reflection.Assembly.GetTypes())时,出现了许多文件未找到错误。

我尝试添加一堆软件包,但收效甚微,我不确定这是要走的路。

这是我的项目文件。

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

      <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>

        <IsPackable>false</IsPackable>   
      </PropertyGroup>

      <ItemGroup>
        <PackageReference Include="FluentAssertions" Version="5.9.0" />
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
        <PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
        <PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
        <PackageReference Include="PossumLabs.Specflow.Core" Version="1.0.0-CI00024" />
        <PackageReference Include="PossumLabs.Specflow.Selenium" Version="1.0.0-CI00030" />
        <PackageReference Include="Selenium.Chrome.WebDriver" Version="74.0.0" />
        <PackageReference Include="Selenium.WebDriver" Version="3.141.0" />
        <PackageReference Include="SpecFlow" Version="3.0.225" />
        <PackageReference Include="SpecFlow.MsTest" Version="3.0.225" />
        <PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.0.225" />
        <PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" />
     </ItemGroup>

    </Project>
  

无法加载文件或程序集   'Microsoft.VisualStudio.TestPlatform.ObjectModel,版本= 11.0.0.0,   文化=中性,PublicKeyToken = b03f5f7f11d50a3a'。系统无法   找到指定的文件。

同样要

Microsoft.VisualStudio.TestPlatform.TestFramework  

Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface     Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices     Microsoft.VisualStudio.TestPlatform.ObjectModel     Microsoft.VisualStudio.TestPlatform.TestFramework

我想将它们复制到我的输出文件夹中,以便可以反映到单元测试DLL中。

1 个答案:

答案 0 :(得分:0)

没有答案,只是解决方法;

在反映到Microsoft DLL中时发生了这种情况;似乎.net核心反射发生了一些变化,仅盲目地反射文件夹中的每个dll不再安全。通过它们的依赖关系过滤Dll是可能的,如果我缩小范围的话,也可以。但是,即使我加载了每个DLL,GetTypes也会引发如上所述的错误。

过滤方式比过滤掉要查找的DLL要重要。

两者都一样

            foreach (string dll in Directory.GetFiles(path, "*.dll"))
            assemblies.Add(Assembly.LoadFile(dll));

错误代码:

foreach (var assembly in assemblies)
        {}

好的代码:

foreach (var assembly in assemblies.Where(a=>a.GetReferencedAssemblies().Any(x=>x.Name.Contains("YourCompanyNamespace"))))
        {}