2011-12-02 47 views
0

我正在嘗試使用ILMerge將多個程序集合併成一個插件程序集,該程序集將由另一個應用程序動態加載。獲取msbuild中已解析參考路徑的列表

使用社區的任務,我這麼遠:

<Target Name="CombineAssemblies" AfterTargets="MvcBuildViews"> 
    <ItemGroup> 
     <MergePaths Include="@(_ResolvedProjectReferencePaths)" /> 
     <!--<MergePaths Include="%(Reference.ResolvedPath)" /> This doesn't work! --> 
    </ItemGroup> 

    <ILMerge 
     DebugInfo="true" 
     LogFile="log.txt" 
     InputAssemblies="@(MergePaths)" 
     OutputFile="&quot;$(TargetPath)&quot;" 
     CopyAttributes="true" 
     TargetPlatformVersion="v4"/> 
</Target> 

使用@(_ ResolvedProjectReferencePaths)能正常工作項目引用,他們的路徑是通過對ILMerge任務正確passesd。

當通過MSBuild運行時,ILMerge.exe出錯。查看日誌文件,我得到:

Unresolved assembly reference not allowed: System.Web.Mvc. 
    at System.Compiler.Ir2md.GetAssemblyRefIndex(AssemblyNode assembly) 
    at System.Compiler.Ir2md.GetTypeRefIndex(TypeNode type) 
    at System.Compiler.Ir2md.VisitReferencedType(TypeNode type) 
    at System.Compiler.Ir2md.VisitMethod(Method method) 
    at System.Compiler.Ir2md.VisitClass(Class Class) 
    at System.Compiler.Ir2md.VisitModule(Module module) 
    at System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation) 
    at System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer) 
    at System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName) 
    at System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module) 
    at ILMerging.ILMerge.Merge() 
    at ILMerging.ILMerge.Main(String[] args) 

我引用MVC庫,從日誌文件中我認爲不能用ILMerge解決,即使它們在實際的編譯過程正確地解析。

因此,我想將這些庫的位置傳遞給ILMerge,理想情況下使用References項目,這樣我就不必手動添加一堆參考路徑,如果我添加或刪除了參考,這些參考路徑就不得不改變。是否有一些等同於@(_ ResolvedProjectReferencePaths)的正常引用?

謝謝!

回答

2

Try @(ReferencePath),應在目標ResolveAssemblyReferences之後使用。