Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何首先使用msbuild生成依赖项目_C#_.net 4.0_Msbuild - Fatal编程技术网

C# 如何首先使用msbuild生成依赖项目

C# 如何首先使用msbuild生成依赖项目,c#,.net-4.0,msbuild,C#,.net 4.0,Msbuild,我刚刚开始研究msbuild,因为我想创建自己的构建脚本。现在,我可以创建只编译一个项目的构建脚本,但是如何处理依赖关系呢 例如,如果我有两个项目使用这两个msbuild脚本生成,该怎么办 projectA.xml projectB.xml 我如何告诉msbuild,当我执行projectB.xml时,它应该首先执行projectA.xml 我在谷歌上搜索了很多,但它似乎没有得到像我这样的首发球员所理解的任何东西。如果有一个描述这一点的文章链接,或者仅仅是一个小的代码示例,我会非常高兴 我之所以

我刚刚开始研究msbuild,因为我想创建自己的构建脚本。现在,我可以创建只编译一个项目的构建脚本,但是如何处理依赖关系呢

例如,如果我有两个项目使用这两个msbuild脚本生成,该怎么办

  • projectA.xml
  • projectB.xml
  • 我如何告诉msbuild,当我执行projectB.xml时,它应该首先执行projectA.xml

    我在谷歌上搜索了很多,但它似乎没有得到像我这样的首发球员所理解的任何东西。如果有一个描述这一点的文章链接,或者仅仅是一个小的代码示例,我会非常高兴

    我之所以需要此控件,是因为我正在构建一个库。图书馆由几个项目组成。开发人员应该能够下拉库的源代码,只构建他想要的库


    实际上,我希望能够从不同的项目中构建.net模块。这就是我希望能够运行自定义msbuild脚本的原因。

    如果使用这两个项目创建解决方案,则可以使用msbuild将
    .sln
    文件作为目标,而不是直接生成项目,它应该处理项目依赖关系:)

    但如果您使用的是standard.csproj项目

    好的,我看了一个我正在做的项目,它是这样的:

    <ItemGroup>
       <ProjectReference Include="..\SomeFolder\SomeProject.csproj">
          <Project>{1A94B405-2D01-4A09-90D5-A5B31180A03B}</Project>
          <Name>SomeProjectNamespace</Name>
       </ProjectReference>
    </ItemGroup>
    
    
    {1A94B405-2D01-4A09-90D5-A5B31180A03B}
    SomeProjectNamespace
    

    这里有一个关于参考文献的例子。向下滚动,直到找到ProjectReference…

    您不需要使用sln构建。如果在csproj中使用项目引用,那么依赖关系顺序由MSBuild处理。 试试看。自动地。
    您不需要在msbuild脚本中对依赖项顺序进行排序

    我设置了构建脚本,这样我就有了一些不做任何事情的通用目标,但使用DependsOnTargets来设置项目依赖项并运行构建

    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
      <!-- ************************************************************************************************ -->
      <!-- Targets that run the builds -->
      <!-- ************************************************************************************************ -->
      <Target Name="AutoBuild" DependsOnTargets="BuildProject1;BuildProject2;BuildInstallers">
        <OnError ExecuteTargets="NotifyFailure" />
      </Target>
      <Target Name="FullCompile" DependsOnTargets="BuildProject1;BuildProject2">
        <OnError ExecuteTargets="NotifyFailure" />
      </Target>
    
      <!-- Build Project 1 -->
      <Target Name="BuildProject1">
        <!-- Use MSBuild task and point it to build project1.csproj, project1.sln or whatever your projects is -->
      </Target>
    
      <!-- Build Project 2 -->
      <Target Name="BuildProject2">
        <!-- Use MSBuild task and point it to build project2.csproj, project2.sln or whatever your projects is -->
      </Target>
    
      <Target Name="BuildInstallers">
        <!-- Whatever logic you have for building installers -->
      </Target>
    
    </Project>
    
    
    
    将讨论类似情况下的情况。该线程还显示了到官方的链接。

    关于我的回答,也许你可以创建两个项目,其中一个项目依赖于另一个项目,看看.sln和.csproj文件是什么样子,也许这会告诉你如何在自己的自定义脚本中实现依赖关系。关于我的最后一条评论,我这样做是为了你,并用细节编辑了我的答案:)+1表示建议使用.sln文件。如果您没有理由不希望VisualStudio管理生成的顺序,请不要重新发明轮子。我已更新了我的问题,以解释为什么我希望能够自定义生成过程。我将研究ProjectReference目标!!谢谢分享。我投票支持这个,因为“在项目文件中查找”提示。这是一个有用的资源,我没有意识到要使用它。谢谢。我接受这一点是因为MSBuild任务提示。这正是我想要使用的。在这个任务中,我可以引用另一个要构建的项目。谢谢。我想在不需要在我的解决方案中包含它们的情况下构建项目,这可能吗?这并不总是有效的。当我将解决方案从VS 2010转换为VS 2012时,该依赖项目从未在MSBuild.exe中生成(但在VS 2012中确实如此)。然而,添加“appclay”所描述的项目提示,它现在在这两种情况下都能工作。感谢您的链接!我遇到了和上面讨论的问题一样的问题。。。最后有个解决方案真是太好了。