MSBuild ReferenceDependencyPaths不包含第n个依赖项

时间:2016-03-28 19:57:15

标签: c# msbuild

当我使用msbuild进行构建时,我试图获取所有依赖项的列表。我正在尝试使用ReferenceDependencyPaths,我非常确定它应该包含第二个和第n个依赖项。当我使用它时,我得到了一些二阶依赖,但不是全部,我错过了所有的3阶或更高的依赖。我试图这样做的原因是我可以将依赖项的依赖项复制到我正在构建的项目的bin文件夹中。

我的解决方案是基于http://blog.alexyakunin.com/2009/09/making-msbuild-visual-studio-to.html这篇博文,因为他的解决方案不适合我开箱即用。

到目前为止,这是我的解决方案,不幸的是复制了一些框架dll但缺少像ninject这样的其他dll。

有没有人知道他们是否应该使用不同的项目或属性来获取我的依赖项,依赖项?在这种情况下,ninject来自nuget,nuget引用是否解决了其他什么以及它们将存储在哪个属性或项目中?

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
    <CopyIndirectDependenciesCondition="'$(CopyIndirectDependencies)'==''">true</CopyIndirectDependencies>
</PropertyGroup>

<!-- BuildXxx part -->
<Target Condition="'$(CopyIndirectDependencies)'=='true'"DependsOnTargets="DetectIndirectDependencies" Name="CopyIndirectDependencies">
    <Message Importance="low" Text="Direct dependency: %(ReferencePath.Filename)%(ReferencePath.Extension)" />
    <Message Importance="low" Text="Indirect dependency: %(ReferenceDependencyPaths.Filename)%(ReferenceDependencyPaths.Extension) Full Path: @(IndirectDependency)"/>

    <Copy Condition="'%(ReferenceDependencyPaths.RootDir)%(ReferenceDependencyPaths.Directory)%(ReferenceDependencyPaths.Filename)%(ReferenceDependencyPaths.Extension)'!=''" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="false" SourceFiles="@(IndirectDependency)">
      <Output ItemName="IndirectDependencyCopied" TaskParameter="CopiedFiles"/>
    </Copy>
</Target>

<Target DependsOnTargets="ResolveAssemblyReferences" Name="DetectIndirectDependencies">
<!-- Creating indirect dependency list -->
   <CreateItem Condition="'%(ReferenceDependencyPaths.RootDir)%(ReferenceDependencyPaths.Directory)%(ReferenceDependencyPaths.Filename)%(ReferenceDependencyPaths.Extension)'!=''" Include="%(ReferenceDependencyPaths.RootDir)%(ReferenceDependencyPaths.Directory)%(ReferenceDependencyPaths.Filename)%(ReferenceDependencyPaths.Extension)">
     <Output ItemName="IndirectDependency" TaskParameter="Include"/>
   </CreateItem>
</Target>

<!-- Build sequence modification -->
<PropertyGroup>
  <CoreBuildDependsOn>$(CoreBuildDependsOn);CopyIndirectDependencies
  </CoreBuildDependsOn>
</PropertyGroup>
</Project>

1 个答案:

答案 0 :(得分:1)

我在那里发表了评论,

  

当间接依赖来自NuGet时,它对我不起作用   包(Microsoft.AspNet.WebApi.Client和Newtonsoft.Json)。但是   小费描述于   http://www.paraesthesia.com/archive/2014/05/09/recursively-copying-indirect-project-dependencies-in-msbuild.aspx/   解决了这个问题。我认为它使用更合适的间接依赖   检测方法。