无法生成 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 - 在生成的代码中生成错误的主要内容,如果未能解决你的问题,请参考以下文章

无法注册新用户 android asmack “无法生成验证码”

xcodebuild 命令无法生成 iPA

为啥生成的exe文件在别人的电脑上无法运行

无法生成迁移

无法生成 deps.json 以启用迁移

Umbraco 8 模型生成器无法找到 doctype 生成的文件