问题描述
我正在尝试为NHibernate.dll生成 moles 程序集使用下载所附带的可执行文件,但是生成的代码带有一些我不知道如何解决的构建错误(如果可能的话).
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).
这就是我要做的:
- 将NHibernate.dll和Iesi.Collections.dll复制到一个新目录.
- 站在该目录中,运行
../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'
我打开了一个项目,看我是否可以自己修复该错误,但是事实证明,Moles在一个代码文件中生成了所有内容,因此这是巨大的(生成错误发生在333100和333102行...)因此,Visual Studio在打开时或多或少会出现问题.
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.
反正有解决此生成错误的方法吗?我已经看过moles.exe的选项,但是我了解不多.
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.
是否还有其他人已经生成了NHibernate.Moles.dll?如果是这样,我在哪里可以找到它?由于.
在Google搜索中意为任何单词分隔符",因此并没有给我太多...
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
推荐答案
如果我生成所有类型,我确实会收到错误消息,但是可以在nhibernate中对类型进行子选择,则有可能生成痣.
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.
我的vs.net项目中的NHibernate.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>
好吧,我得到了使用.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"
如果您对这些类型不做任何操作,我不确定是否需要包含Iesi.Collections.
I'm not sure if you need to include the Iesi.Collections if you do not do anything with those types.
这篇关于无法生成NHibernate.Moles.dll-在生成的代码中生成错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!