2012-03-03 8 views
0

У меня есть проект C#, в котором я запускаю ILMerge в целевой точке AfterBuild. Тем не менее, у меня есть сообщение, в котором сообщается, что моя команда не удалась и вышла с кодом -1073741701.ILMerge вышел с кодом -1073741701

Странная вещь для меня в том, что если я запустил команду, написанную на выходе в командной строке, она будет успешной. Есть идеи ?

Один совет: я использую ILMerge для объединения проектов, созданных для silverlight с «классическим» .NET-проектом. Вы можете найти этот проект на http://euss.codeplex.com. Проект вызывает у меня неприятности является Evaluant.Uss.PersistenceEngine.Contracts

Вот это MSBuild я бегу, чтобы создать свою команду ILMerge

<CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='false' and '$(FwkLibPath)\.'!='%(RootDir)%(Directory).'"> 
    <Output TaskParameter="Include" ItemName="libPaths" /> 
</CreateItem> 
<CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true'"> 
    <Output TaskParameter="Include" ItemName="IlmergeAssemblies" /> 
</CreateItem> 
<Exec Command="&quot;$(SolutionDir)Dependencies\ILMerge\Ilmerge.exe&quot; /target:library /lib:&quot;$(FwkLibPath)&quot; @(libPaths->'/lib:&quot;%(RootDir)%(Directory).&quot;', ' ') &quot;/targetplatform:v2,$(FwkLibPath)&quot; /out:&quot;$(MergedOutDir)$(RootNamespace)$(Suffix)&quot; &quot;$(ProjectDir)@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" /> 

Он генерирует следующие данные в окне вывода:

P:\Developpement\euss\Dev\ProvideMultiplatformVersions.proj(42,5): error MSB3073: The command ""P:\Developpement\euss\Dev\Dependencies\ILMerge\Ilmerge.exe" /target:library /lib:"C:\Windows\Microsoft.NET\Framework\v2.0.50727" /lib:"P:\Developpement\euss\Dev\Assemblies\." "/targetplatform:v2,C:\Windows\Microsoft.NET\Framework\v2.0.50727" /out:"P:\Developpement\euss\Dev\Assemblies\Net\Evaluant.Uss.PersistenceEngine.Contracts.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.PersistenceEngine.Contracts\obj\Debug\Evaluant.Uss.PersistenceEngine.Contracts.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Commands\bin\Debug\Evaluant.Uss.Commands.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Commands\bin\Debug\Evaluant.Uss.Domain.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Commands\bin\Debug\Evaluant.Uss.Era.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Metadata\bin\Debug\Evaluant.Uss.MetaData.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Commands\bin\Debug\Evaluant.Uss.MetaData.Light.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Commands\bin\Debug\Evaluant.Uss.Model.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.PersistenceEngine.Contracts\bin\Debug\Evaluant.Uss.PersistenceEngine.Contracts.Instrumentation.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Commands\bin\Debug\Evaluant.Uss.PersistentDescriptors.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Serializer\bin\Debug\Evaluant.Uss.Serializer.dll" "P:\Developpement\euss\Dev\Evaluant.Uss.Commands\bin\Debug\Evaluant.Uss.Utility.dll"" exited with code -1073741701. 

Если я скопирую эту команду (без окружающих цитат), она работает.

+0

Это сборка .Net2 или .Net 4? Это может быть проблема с ресурсом? – rene

+0

.NET 2, и у меня нет ресурсов в любом проекте этого решения –

+1

FWIW, -1073741701, то есть '0xC000007B' является кодом' STATUS_INVALID_IMAGE_FORMAT'. Не могли бы вы вывести строки команд из «AfterBuild» и из командной строки? Вы уверены, что используете те же файлы ввода из обоих? –

ответ

0

Похоже ILMerge не поддерживает вызывается внутри другого процесса:

  • если я запускаю его с MSBuild, он падает с кодом ошибки 0xc000007b
  • Если я запускаю его с MSBuild в качестве администратора, его падает с той же ошибкой
  • , если я заставляю ILMerge запустить в качестве администратора и запустить MSBuild в качестве обычного пользователя, я открыл новую командную строку для ILMerge и успешно
  • Если я бегу ILMerge без MSBuild в качестве стандартного пользователя , он преуспевает
+0

Это была проблема с моей установкой .NET. Я переключился на другие окна, и он отлично работает. –