从另一个项目调用的nuget项目的MSBuild目标

时间:2018-02-02 16:01:40

标签: c# visual-studio configuration msbuild nuget

我是MSBuild的初学者。我有一个项目(A)依赖于另一个项目(B),它从NuGet服务器或本地工作区(我为此目的使用NuGetReferenceSwitcher)消耗它。 不久,这是我的要求:

  1. 从NuGet服务器使用时,项目B必须同时支持Debug和Release版本。这样,如果我们在Visual Studio中切换到Debug,我们就可以在从A调用时调试项目B.现在,NuGet也提供了Release版本。
  2. 切换到本地工作区时,仍应正确构建。
  3. 以下是我的本地文件的位置:

    \工作空间\了projectA \ projectA.sln

    \工作空间\项目B \ projectB.csproj

    我尝试的解决方案如下:

    1. 在projectB中,我创建了一个目标文件(位于build \ projectB.targets中),其中包含以下内容:
    2. <?xml version="1.0" encoding="utf-8"?>
      <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup Condition="'$(Configuration)' == 'Debug'">
          <Reference Include="lib1">
            <HintPath>"$(MSBuildProjectDirectory)\bin\$platform$\Debug\lib1.dll"</HintPath>
          </Reference>        
      </ItemGroup>
      
        <ItemGroup Condition="'$(Configuration)' == 'Release'">
        <Reference Include="lib1">
            <HintPath>"$(MSBuildProjectDirectory)\bin\$platform$\Release\lib1.dll"</HintPath>
          </Reference>
        </ItemGroup>
      </Project>

      1. projectB.csproj包含以下内容:
      2. <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
          <Import Project="packages\some_package" Condition="Exists('packages\some_package)" />

        1. projectB.nuspec包含:
        2. <file src="build\**" target="build\net462" />

          1. projectA.csproj(取决于projectB)包含:
          2. <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
              <Import Project="..\packages\projectB.*\build\projectB.targets" Condition="Exists('..\packages\projectB.*\build\projectB.targets')" />
              <Import Project="..\..\..\..\projectB\projectB.csproj" Condition="!Exists('..\packages\projectB.*\build\projectB.targets')" />

            以下是我的问题:

            1. 使用此配置,当对projectB使用本地工作空间时,projectA的编译失败,因为找不到projectA的“some_package”的相对路径(如第4点所示,它也使用projectB的相对路径)。我怎么能从projectA引用projectB所以它不会使编译失败?
            2. 使用nuget时,为什么此代码无法从发行版切换到调试?
            3. 谢谢,

1 个答案:

答案 0 :(得分:1)

  

使用nuget时,为什么此代码无法从发行版切换到调试?

很简单,NuGet没有“Debug”或“Release”的概念。

但是,有一种方法可以create debug symbols for NuGet packages,然后configure Visual Studio to step through the code已安装的软件包。