System.Collections.Immutable对System.Runtime和FxCop / metrics

时间:2016-03-17 16:35:16

标签: c# metrics immutable-collections

在安装了Windows 7的{​​{1}}上,我创建了一个针对.NET 4.5.2的新ClassLibrary项目。

我想通过.NET 4.5.2中的Visual Studio 2013启动metrics.exe附带的FxCop来计算该程序集的代码度量标准。

一切正常。

然后我注入c:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\

我可以在引用中看到只引用了System.Collections.Immutable,因为找到了其他依赖项(System.Collections.Immutable v1.1.37System.RuntimeSystem.Collections等)(我想在{ {1}})

我创建了一个虚拟方法,用于创建一个虚拟的ImmutableArray System.Diagnotics.Debug

一切都可以编译并且工作正常。

我重新启动指标计算。

我有以下错误:

  

metrics.exe /f:c:\dev\ClassLibrary1\ClassLibrary1\bin\Debug\ClassLibrary1.dll /o:toto.xml

     

错误:CA0055:无法加载文件:   'C:\ dev的\ ClassLibrary1的\ ClassLibrary1的\ BIN \调试\ ClassLibrary1.dll'。

如果我在c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\Facades\程序集上执行相同的命令,则会出现以下错误:

  

计算文件'c:\ dev \ ClassLibrary1 \ ClassLibrary1 \ bin \ Debug \ System.Collections.Immutable.dll'的指标。   无法找到框架程序集'System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。

现在,如果我复制输出目录中var foo = new List<int>().ToImmutableArray();中的System.Immutable.Collections文件,那么计算System.Runtime上的代码指标就可以了。但是,如果我复制c:\Windows\Microsoft.NET\Framework\v4.0.30319\中的版本,如果再次失败。

在Web应用程序中使用Immutable调试另一个库时,我可以在“已加载的模块”中看到以下内容:

  

System.Runtime.dll C:\ windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Runtime \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Runtime.dll是否跳过加载符号。 544 4.06.1055.0 06/11/2015 03:49 000007FED10D0000-000007FED10D9000 [15760] w3wp.exe [4] / LM / W3SVC / 2 / ROOT / WebSite-2-131026947404276669

所有这些让我觉得System.Collections.Immutable使用ClassLibrary1.dll

中的System.Runtime版本

所以我想,“让我们添加对该程序集的明确引用。”如果我这样做,我得到以下编译错误:

  

错误CS1703:导入了具有等效标识的多个程序集:'c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Runtime.dll'和'C:\ Program Files(x86)\ Reference Assemblies \微软\ Framework.NETFramework \ v4.5.2 \外立面\ System.Runtime.dll”。删除其中一个重复的引用。

有些地方出了问题,我无法确定它。

我使用c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\Facades\ c:\Windows\Microsoft.NET\Framework\v4.0.30319\来解决错误。

有没有人有关于真正错误的俱乐部?

(我还尝试使用.NETL 4并使用CopyLocal = true添加来自/ignoreinvalidtargets的所有依赖程序集的引用。尽管有以下警告,它仍可正常工作:

  

使用与当前目标框架不同的目标框架安装了一些NuGet包,可能需要重新安装。有关详细信息,请访问http://docs.nuget.org/docs/workflows/reinstalling-packages。受影响的包:System.Collections,System.Collections.Immutable,System.Diagnostics.Debug,System.Globalization,System.Linq,System.Resources.ResourceManager,System.Runtime,System.Runtime.Extensions,System.Threading

感谢。

0 个答案:

没有答案