无法生成 NHibernate.Moles.dll - 在生成的代码中生成错误
Posted
技术标签:
【中文标题】无法生成 NHibernate.Moles.dll - 在生成的代码中生成错误【英文标题】:Can't generate NHibernate.Moles.dll - build errors in generated code 【发布时间】:2011-07-05 08:45:33 【问题描述】:我正在尝试使用下载随附的可执行文件为 NHibernate.dll 生成 moles 程序集,但生成的代码带有一些我不知道如何修复的构建错误(如果它甚至可能的话)。
这就是我的工作:
-
将 NHibernate.dll 和 Iesi.Collections.dll 复制到新目录。
站在那个目录下,运行
../pathtomoles/moles.exe NHibernate.dll
Moles 然后输出以下内容:
Microsoft Moles v0.94.51023.0 - http://research.microsoft.com/moles - .NET v4.0。 30319 版权所有 (c) Microsoft Corporation 2007-2010。版权所有。 00:00:00.00> 摩尔 痣:信息:元数据:加载 D:\ ... \NHibernate.dll 痣:信息:编译:输出程序集名称:NHibernate.Moles 痣:信息:代码:找到 2018 年类型 痣:信息:代码:可见性:导出或组装(NHibernate.Moles) 00:00:01.87> 代码生成 Moles : info : code : 在 D:\ ... \obj\moles\nh\m.g.cs 生成代码 00:00:02.05> 存根生成 痣:信息:代码:生成 1361 个存根类型 00:00:05.68> 痣的产生 痣:信息:代码:生成 1552 种痣类型 00:00:24.13> 编译构建失败并出现以下错误:
错误 CS0122:'Remotion.Data.Linq.Clauses.ResultOperatorBase' 由于其保护级别而无法访问 错误 CS0703:可访问性不一致:约束类型 'Remotion.Data.Linq.Clauses.ResultOperatorBase' 比 'NHibernate.Linq.Visitors.ResultOperatorProcessors.Moles.MResultOperatorProcessor'
我已经打开了项目,看看我是否可以自己修复错误,但事实证明 Moles 在一个代码文件中生成所有内容,因此非常庞大(构建错误发生在第 333100 和 333102 行...)所以 Visual Studio 在打开时或多或少会崩溃。
有没有办法修复这个生成错误?我查看了 moles.exe 的选项,但我没有得到太多。
还有其他人已经生成了 NHibernate.Moles.dll 吗?如果是这样,我在哪里可以找到它?由于.
在谷歌搜索中表示“任何单词分隔符”,它并没有给我太多...
完整的构建输出,供参考:
--- 输出 构建开始于 2011-07-05 10:19:03。 项目“D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies \NHibernate Moles\obj\moles\nh\m.g.csproj" 在节点 1(默认目标)上。 PrepareForBuild: 创建目录“b\”。 创建目录“o\”。 GenerateTargetFrameworkMonikerAttribute: 跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件 es 相对于输入文件是最新的。 核心编译: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /unsafe+ /no 警告:1587,1591,1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /doc:b\NHibernat e.Moles.xml /define:TRACE /reference:ic="D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\ Microsoft Moles\PublicAssemblies\NHibernate Moles\Iesi.Collections.dll" /referen ce:"C:\Program Files (x86)\Common Files\Microsoft Shared\ExtendedReflection\0.94 .51023.0\bin\Microsoft.ExtendedReflection.dll" /reference:mmf="C:\Program Files (x86)\Microsoft Moles\PublicAssemblies\Microsoft.Moles.Framework.dll" /reference :"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\ v4.0\mscorlib.dll" /reference:nh="D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microso 英尺 Moles\PublicAssemblies\NHibernate Moles\NHibernate.dll" /reference:"C:\Progra m 文件 (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System .Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Fra mework\.NETFramework\v4.0\System.Data.dll" /reference:"C:\Program Files (x86)\Re 参考 Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll" /reference :ssm="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramew ork\v4.0\System.ServiceModel.dll" /reference:st="C:\Program Files (x86)\Referenc e 程序集\Microsoft\Framework\.NETFramework\v4.0\System.Transactions.dll" /re reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFra mework\v4.0\System.Xml.dll" /debug:pdbonly /keyfile:m.g.snk /optimize+ /out:o\NH ibernate.Moles.dll /target:library m.g.cs "C:\Users\Tomas\AppData\Local\Temp\.NE TFramework,Version=v4.0.AssemblyAttributes.cs" m.g.cs(333102,50): 错误 CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBase' 由于其保护级别而无法访问 [D:\Projects\NCVIB-GIT\NCVIB\src\Ve ndor\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj] m.g.cs(333100,26): 错误 CS0703: 不一致的可访问性: 约束类型 'Re motion.Data.Linq.Clauses.ResultOperatorBase' 比 'NHibernate 更难访问 .Linq.Visitors.ResultOperatorProcessors.Moles.MResultOperatorProcessor' [D:\P rojects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibernate M oles\obj\moles\nh\m.g.csproj] 完成构建项目“D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\Pu blicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj"(默认目标)——FA 发光二极管。 构建失败。 "D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibern 吃了 Moles\obj\moles\nh\m.g.csproj" (默认目标) (1) -> (CoreCompile 目标)-> m.g.cs(333102,50): 错误 CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBas e' 由于其保护级别而无法访问 [D:\Projects\NCVIB-GIT\NCVIB\src\ 供应商\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj ] m.g.cs(333100,26):错误 CS0703:不一致的可访问性:约束类型' Remotion.Data.Linq.Clauses.ResultOperatorBase' 比'NHiberna 更难访问 te.Linq.Visitors.ResultOperatorProcessors.Moles.MResultOperatorProcessor' [D: \Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibernate 痣\obj\痣\nh\m.g.csproj] 0 个警告 2 个错误 经过时间 00:00:03.24 - - 环境 痣:警告:编译:项目编译失败,退出代码 1 痣:警告:编译:编译失败,重试没有 Code Co 合同 - - 输出 构建开始于 2011-07-05 10:19:06。 项目“D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies \NHibernate Moles\obj\moles\nh\m.g.csproj" 在节点 1(默认目标)上。 GenerateTargetFrameworkMonikerAttribute: 跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件 es 相对于输入文件是最新的。 核心编译: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /unsafe+ /no 警告:1587,1591,1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /doc:b\NHibernat e.Moles.xml /define:TRACE /reference:ic="D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\ Microsoft Moles\PublicAssemblies\NHibernate Moles\Iesi.Collections.dll" /referen ce:"C:\Program Files (x86)\Common Files\Microsoft Shared\ExtendedReflection\0.94 .51023.0\bin\Microsoft.ExtendedReflection.dll" /reference:mmf="C:\Program Files (x86)\Microsoft Moles\PublicAssemblies\Microsoft.Moles.Framework.dll" /reference :"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\ v4.0\mscorlib.dll" /reference:nh="D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microso 英尺 Moles\PublicAssemblies\NHibernate Moles\NHibernate.dll" /reference:"C:\Progra m 文件 (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System .Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Fra mework\.NETFramework\v4.0\System.Data.dll" /reference:"C:\Program Files (x86)\Re 参考 Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll" /reference :ssm="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramew ork\v4.0\System.ServiceModel.dll" /reference:st="C:\Program Files (x86)\Referenc e 程序集\Microsoft\Framework\.NETFramework\v4.0\System.Transactions.dll" /re reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFra mework\v4.0\System.Xml.dll" /debug:pdbonly /keyfile:m.g.snk /optimize+ /out:o\NH ibernate.Moles.dll /target:library m.g.cs "C:\Users\Tomas\AppData\Local\Temp\.NE TFramework,Version=v4.0.AssemblyAttributes.cs" m.g.cs(333102,50): 错误 CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBase' 由于其保护级别而无法访问 [D:\Projects\NCVIB-GIT\NCVIB\src\Ve ndor\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj] m.g.cs(333100,26): 错误 CS0703: 不一致的可访问性: 约束类型 'Re motion.Data.Linq.Clauses.ResultOperatorBase' 比 'NHibernate 更难访问 .Linq.Visitors.ResultOperatorProcessors.Moles.MResultOperatorProcessor' [D:\P rojects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibernate M oles\obj\moles\nh\m.g.csproj] 完成构建项目“D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\Pu blicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj"(默认目标)——FA 发光二极管。 构建失败。 "D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibern 吃了 Moles\obj\moles\nh\m.g.csproj" (默认目标) (1) -> (CoreCompile 目标)-> m.g.cs(333102,50): 错误 CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBas e' 由于其保护级别而无法访问 [D:\Projects\NCVIB-GIT\NCVIB\src\ 供应商\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj ] m.g.cs(333100,26):错误 CS0703:不一致的可访问性:约束类型' Remotion.Data.Linq.Clauses.ResultOperatorBase' 比'NHiberna 更难访问 te.Linq.Visitors.ResultOperatorProcessors.Moles.MResultOperatorProcessor' [D: \Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibernate 痣\obj\痣\nh\m.g.csproj] 0 个警告 2 个错误 经过时间 00:00:02.76
【问题讨论】:
【参考方案1】:如果我生成所有类型,我确实会收到错误,但是您可以在 nhibernate 中对类型进行子选择,这可能会生成痣。
我的 vs.net 项目中的 NHibernate.moles 文件:
<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
<Assembly Name="NHibernate" />
<StubGeneration >
<Types >
<Clear />
<Add TypeName ="Session"/>
</Types>
</StubGeneration>
<MoleGeneration >
<Types >
<Clear />
<Add TypeName ="Session"/>
</Types>
</MoleGeneration>
</Moles>
好的,我得到了使用 .moles 文件的参数:
"C:\Program Files\Microsoft Moles\bin\moles.exe" /mfo /nologo /tfv:v4.0 /r:"<full path>\NHibernate.dll;<full path>\Iesi.Collections.dll" "NHibernate.moles"
如果您不对这些类型执行任何操作,我不确定是否需要包含 Iesi.Collections。
【讨论】:
我尝试将一个名为 NHibernate.moles 的文件添加到带有 NHibernate dll 并运行moles.exe NHibernate.moles
的目录中,但没有成功。 Moles 似乎没有找到任何可以存根的东西,所以它只是退出而不做任何事情。 moles.exe /mfo NHibernate.dll
抱怨没有发现任何程序集。
我更新了痣参数。我测试的NHibernate版本是3.2。
你现在正式成为我的英雄 =)以上是关于无法生成 NHibernate.Moles.dll - 在生成的代码中生成错误的主要内容,如果未能解决你的问题,请参考以下文章