Can't generate NHibernate.Moles.dll - build errors in generated code

老子叫甜甜 提交于 2019-12-11 07:39:36

问题


I'm trying to generate a moles assembly for NHibernate.dll using the executable that comes with the download, but the generated code comes with some build errors that I don't know how to fix (if it's even possible).

This is what I do:

  1. Copy NHibernate.dll and Iesi.Collections.dll to a fresh directory.
  2. Standing in that directory, run ../pathtomoles/moles.exe NHibernate.dll

Moles then outputs the following:

Microsoft Moles v0.94.51023.0 - http://research.microsoft.com/moles - .NET v4.0.
30319
Copyright (c) Microsoft Corporation 2007-2010. All rights reserved.

00:00:00.00> moles
  Moles : info : metadata : loading D:\ ... \NHibernate.dll
  Moles : info : compilation : output assembly name: NHibernate.Moles
  Moles : info : code : found 2018 types
  Moles : info : code : visibility: exported or assembly(NHibernate.Moles)
  00:00:01.87> code generation
    Moles : info : code : generating code at D:\ ... \obj\moles\nh\m.g.cs
    00:00:02.05> stubs generation
      Moles : info : code : generated 1361 stub types
    00:00:05.68> moles generation
      Moles : info : code : generated 1552 mole types
  00:00:24.13> compiling

and the build fails with the following errors:

error CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBase'
 is inaccessible due to its protection level 

error CS0703: Inconsistent accessibility: constraint type
'Remotion.Data.Linq.Clauses.ResultOperatorBase' is less accessible than 
'NHibernate.Linq.Visitors.ResultOperatorProcessors.Moles.MResultOperatorProcessor'

I've opened the project to see if I could fix the error myself, but it turns out Moles generates everything in one single code file, which is thus huge (the build errors occur on lines 333100 and 333102...) so Visual Studio more or less crasches on open.

Is there anyway to fix this generation error? I've looked at the options to moles.exe, but I don't get much of it.

Has anyone else already generated NHibernate.Moles.dll? If so, where do I find it? Since . means "any word separator" in a google search, it hasn't given me much...


The complete build output, for reference:

--- Output
Build started 2011-07-05 10:19:03.
Project "D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies
\NHibernate Moles\obj\moles\nh\m.g.csproj" on node 1 (default targets).
PrepareForBuild:
  Creating directory "b\".
  Creating directory "o\".
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output fil
es are up-to-date with respect to the input files.
CoreCompile:
  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /unsafe+ /no
warn: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
ft Moles\PublicAssemblies\NHibernate Moles\NHibernate.dll" /reference:"C:\Progra
m Files (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
ference 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 Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Transactions.dll" /re
ference:"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): error CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBase'
 is inaccessible due to its protection level [D:\Projects\NCVIB-GIT\NCVIB\src\Ve
ndor\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj]
m.g.cs(333100,26): error CS0703: Inconsistent accessibility: constraint type 'Re
motion.Data.Linq.Clauses.ResultOperatorBase' is less accessible than '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]
Done Building Project "D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\Pu
blicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj" (default targets) -- FA
ILED.

Build FAILED.

"D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibern
ate Moles\obj\moles\nh\m.g.csproj" (default target) (1) ->
(CoreCompile target) ->
  m.g.cs(333102,50): error CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBas
e' is inaccessible due to its protection level [D:\Projects\NCVIB-GIT\NCVIB\src\
Vendor\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj
]
  m.g.cs(333100,26): error CS0703: Inconsistent accessibility: constraint type '
Remotion.Data.Linq.Clauses.ResultOperatorBase' is less accessible than 'NHiberna
te.Linq.Visitors.ResultOperatorProcessors.Moles.MResultOperatorProcessor' [D:
\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibernate
 Moles\obj\moles\nh\m.g.csproj]

    0 Warning(s)
    2 Error(s)

Time Elapsed 00:00:03.24




--- Environment

    Moles : warning : compilation : project compilation failed with exit code 1
    Moles : warning : compilation : compilation failed, retrying without Code Co
ntracts
--- Output
Build started 2011-07-05 10:19:06.
Project "D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies
\NHibernate Moles\obj\moles\nh\m.g.csproj" on node 1 (default targets).
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output fil
es are up-to-date with respect to the input files.
CoreCompile:
  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /unsafe+ /no
warn: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
ft Moles\PublicAssemblies\NHibernate Moles\NHibernate.dll" /reference:"C:\Progra
m Files (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
ference 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 Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Transactions.dll" /re
ference:"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): error CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBase'
 is inaccessible due to its protection level [D:\Projects\NCVIB-GIT\NCVIB\src\Ve
ndor\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj]
m.g.cs(333100,26): error CS0703: Inconsistent accessibility: constraint type 'Re
motion.Data.Linq.Clauses.ResultOperatorBase' is less accessible than '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]
Done Building Project "D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\Pu
blicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj" (default targets) -- FA
ILED.

Build FAILED.

"D:\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibern
ate Moles\obj\moles\nh\m.g.csproj" (default target) (1) ->
(CoreCompile target) ->
  m.g.cs(333102,50): error CS0122: 'Remotion.Data.Linq.Clauses.ResultOperatorBas
e' is inaccessible due to its protection level [D:\Projects\NCVIB-GIT\NCVIB\src\
Vendor\Microsoft Moles\PublicAssemblies\NHibernate Moles\obj\moles\nh\m.g.csproj
]
  m.g.cs(333100,26): error CS0703: Inconsistent accessibility: constraint type '
Remotion.Data.Linq.Clauses.ResultOperatorBase' is less accessible than 'NHiberna
te.Linq.Visitors.ResultOperatorProcessors.Moles.MResultOperatorProcessor' [D:
\Projects\NCVIB-GIT\NCVIB\src\Vendor\Microsoft Moles\PublicAssemblies\NHibernate
 Moles\obj\moles\nh\m.g.csproj]

    0 Warning(s)
    2 Error(s)

Time Elapsed 00:00:02.76

回答1:


If I generate all types I do get an error, however you can make a sub selection of the types in nhibernate it is possible to generate moles.

The NHibernate.moles file in my vs.net project:

<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>

Ok I got the parameters for using .moles files:

"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" 

I'm not sure if you need to include the Iesi.Collections if you do not do anything with those types.



来源:https://stackoverflow.com/questions/6580014/cant-generate-nhibernate-moles-dll-build-errors-in-generated-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!