Microsoft伪造x64而不是x86和v4.5

本文关键字:x86 v4 伪造 x64 Microsoft | 更新日期: 2023-09-27 18:00:21

我使用的是Microsoft Fakes测试框架。没有太多的方法可以绕过它,因为我需要使用shim/moles方法,因为我无法更改"遗留"代码。这是来自一个没有来源的供应商的代码,它是在没有考虑测试的情况下编写的。所以我被三种可能的框架卡住了,TypeMock(昂贵),Telerik的JustLock(昂贵)或微软的Fakes。由于我们已经有了VS Ultimate,我们选择了赝品。由于大多数人觉得他们需要建议以某种方式重写或修改代码,以支持使用接口和/或依赖项注入,我会提前告诉你,这不是一个选项。

我遇到的一个问题是,我试图伪造的库很大,需要使用64位版本的fakes.exe,而不是32位版本的(fakes.x86.exe),它达到了32位应用程序的内存限制。

第二个问题是,我需要使用v4.5框架编译fakes库。这可以通过命令行实现,尽管没有文档。原因是在v4.5中,他们在System中添加了IReadOnly*接口。集合。Generic和库使用它们。使用v4进行编译时,会抛出一个错误,说明未按预期找到类型。

问题是,Visual Studio总是使用x86版本和v4.0框架,我找不到替代它的方法。有人知道如何让它使用64位和v4.5框架吗?我目前的想法是不使用visualstudio的内置内容,只使用命令行并手动引用文件。然后,在每次更新dll时,我们都会手动重新创建它并更新引用。这个文件不会经常更新,所以这是有可能的。

我用来手动生成fakes库的命令行(有些人可能会觉得这很有用)是:

"c:'Program Files (x86)'MSBuild'Microsoft'VisualStudio'v11.0'fakes'fakes.exe" <assembly> /tfv:v4.5

help命令只显示v2、v3.5和v4是tfv的可能选项,但我只尝试了v4.5。

我曾尝试将应用程序上的体系结构强制为x64,而不是任何cpu,没有更改它运行的fakes.exe。已在.csproj文件中查找测试,没有任何更改。查看了fakes.exe的.csproj文件,它说使用框架的v4,在visualstudio中打开,改为v4.5,编译良好。使用了fakes命令行,编译得很好。项目中的.fakes文件中有一个属性允许定义编译器版本,但将其设置为v4.5仍然无效。我假设visualstudio从v4到v4.5的版本更改也更改了程序集引用。我的下一个尝试是尝试更改模板项目,如果我能找到的话。

Microsoft伪造x64而不是x86和v4.5

@schellack-以下是我如何"引用创建的fakes dll并确保所需的引用在您的测试项目中"

  1. 在本地编译和运行所有单元测试,并确保它们通过
  2. 在项目的主目录中,与.csproj文件的位置相同,现在应该有一个"FakesAssembly"目录。目录中将是生成的系统。网状物Mvc.4.0.0.0.Fakes.dll(或您使用的任何版本号)。系统的项目参考。网状物Mvc.4.0.0.0.Fakes已经有了指向该目录和dll的提示路径此目录和dll都需要添加到源代码管理中它们不需要添加到VS中
  3. 为了让我们的CI构建机器进行编译,我还必须添加Microsoft。QualityTools。测试。Fakes.dll到项目。
    1. 我找到了微软。QualityTools。测试。C:''Program Files(x86)''Microsoft Visual Studio 11.0''Common7''IDE''PublicAssemblies中的Fakes.dll
    2. 在项目的主目录中,与.csproj文件的位置相同,有一个"Fakes"目录,该目录包含在项目中(在VS中可见),并且受源代码管理。里面有一个.fakes文件。我复制了微软。QualityTools。测试。Fakes.dll放入此目录,通过VS使其也添加到项目中
    3. 项目的.csproj文件中的提示路径需要添加/更新才能在Fakes目录中查找。我在.csproj文件中找到了引用,并将其更改为如下所示:

<Reference Include="Microsoft.QualityTools.Testing.Fakes, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
    <HintPath>Fakes'Microsoft.QualityTools.Testing.Fakes.dll</HintPath>
</Reference>

现在,所有的编译和单元测试都运行

只能想到以下内容(如果已经设置,请道歉):

"测试"-->"测试设置"-->"默认处理器体系结构"-->"X64"

不幸的是,我无法弄清楚如何让visual studio运行fakes.exe而不是fakes.x86.exe。除了在fakes.x86.exe上复制fakes..exe之外。不过,在四处寻找时,微软提出的一个关于使用fakes来提高速度的建议是,只引用创建的fakes dll,并确保所需的引用在您的测试项目中。默认情况下显示为Microsoft。VisualStudio。QualityTools。UnitTestFramework。这样做不仅可以使用fakes,还可以减少构建时间,因为不再需要生成fake库。这不是我最喜欢的解决方案,但它在速度方面确实有优势。所以我要走那条路。

感谢那些在这个问题上提供帮助的人。

回顾一下如何编译4.5版本。。。确保单元测试项目的fameworks版本是4.5,如果从4.0更改,请关闭并重新打开visualstudio。