获取msbuild中已解析的引用路径列表

时间:2011-12-02 11:39:55

标签: msbuild ilmerge

我正在尝试使用ILMerge将多个程序集合并到一个插件程序集中,该程序集将由另一个应用程序动态加载。

使用社区任务,我到目前为止得到了:

<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任务。

通过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库,我认为ILCerge无法解析日志文件,即使它们在实际编译过程中已正确解析。

因此,我希望将这些库的位置传递给ILMerge,理想情况下使用References项,这样我就不必手动添加一堆引用路径,如果添加或删除引用,则必须更改这些路径。是否有一些等同于@(_ ResolvedProjectReferencePaths)的正常引用?

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试使用@(ReferencePath),它应该在目标ResolveAssemblyReferences之后使用。