Не удается сгенерировать NHibernate.Moles.dll - создавать ошибки в сгенерированном коде - PullRequest
1 голос
/ 05 июля 2011

Я пытаюсь сгенерировать сборку молей для NHibernate.dll, используя исполняемый файл, который поставляется вместе с загрузкой, но сгенерированный код содержит некоторые ошибки сборки, которые я не знаю, как исправить (если это вообще возможно).

Вот что я делаю:

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

и сборка завершается со следующими ошибками:

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Я открыл проект, чтобы посмотреть, смогу ли я исправить ошибку самостоятельно, но оказывается, что Moles генерирует все в одном файле кода, который, таким образом, огромен (ошибки сборки происходят в строках 333100 и 333102 ...), поэтому Visual Studio большеили меньше трещин при открытии.

Есть ли способ исправить ошибку этого поколения?Я посмотрел на параметры moles.exe, но я не получаю много.

Кто-нибудь еще генерировал NHibernate.Moles.dll?Если так, где я могу найти это?Так как . означает «любой разделитель слов» в поиске Google, это не дало мне много ...


Полный вывод сборки, для справки:

--- 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 Ответ

2 голосов
/ 07 июля 2011

Если я генерирую все типы, я получаю сообщение об ошибке, однако вы можете сделать подвыбор типов в nhibernate, можно генерировать родинки.

Файл NHibernate.moles в моем проекте vs.net:

<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, если вы ничего не делаетес этими типами.

...