问题
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:
- Copy NHibernate.dll and Iesi.Collections.dll to a fresh directory.
- 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