1

我正在尝试使用下载附带的可执行文件为 NHibernate.dll 生成一个moles程序集,但是生成的代码带有一些我不知道如何修复的构建错误(如果它甚至可能的话)。

这就是我所做的:

  1. 将 NHibernate.dll 和 Iesi.Collections.dll 复制到一个新目录。
  2. 站在那个目录下,运行../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\mgcs 生成代码
    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\mgcsproj" 在节点 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:mgsnk /optimize+ /out:o\NH
ibernate.Moles.dll /target:library mgcs "C:\Users\Tomas\AppData\Local\Temp\.NE
TFramework,Version=v4.0.AssemblyAttributes.cs"
mgcs(333102,50): 错误 CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBase'
 由于其保护级别而无法访问 [D:\Projects\NCVIB-GIT\NCVIB\src\Ve
ndor\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\mgcsproj]
mgcs(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\mgcsproj]
完成构建项目“D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\Pu
blicAssemblies\NHibernate Moles\obj\moles\nh\mgcsproj"(默认目标)——FA
发光二极管。

构建失败。

"D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibern
吃了 Moles\obj\moles\nh\mgcsproj" (默认目标) (1) ->
(CoreCompile 目标)->
  mgcs(333102,50): 错误 CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBas
e' 由于其保护级别而无法访问 [D:\Projects\NCVIB-GIT\NCVIB\src\
供应商\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\mgcsproj
]
  mgcs(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\mgcsproj]

    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\mgcsproj" 在节点 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:mgsnk /optimize+ /out:o\NH
ibernate.Moles.dll /target:library mgcs "C:\Users\Tomas\AppData\Local\Temp\.NE
TFramework,Version=v4.0.AssemblyAttributes.cs"
mgcs(333102,50): 错误 CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBase'
 由于其保护级别而无法访问 [D:\Projects\NCVIB-GIT\NCVIB\src\Ve
ndor\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\mgcsproj]
mgcs(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\mgcsproj]
完成构建项目“D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\Pu
blicAssemblies\NHibernate Moles\obj\moles\nh\mgcsproj"(默认目标)——FA
发光二极管。

构建失败。

"D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibern
吃了 Moles\obj\moles\nh\mgcsproj" (默认目标) (1) ->
(CoreCompile 目标)->
  mgcs(333102,50): 错误 CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBas
e' 由于其保护级别而无法访问 [D:\Projects\NCVIB-GIT\NCVIB\src\
供应商\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\mgcsproj
]
  mgcs(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\mgcsproj]

    0 个警告
    2 个错误

经过时间 00:00:02.76
4

1 回答 1

2

如果我生成所有类型,我确实会收到错误,但是您可以在 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。

于 2011-07-07T12:36:27.657 回答