将一个DotnetCliTool控制台项目推送到nuget列出它的项目依赖项作为包依赖项

时间:2018-01-24 13:03:59

标签: visual-studio nuget .net-core csproj dotnet-cli

我有以下项目的解决方案。

  

MyAppNameSpace.Cli [这是以DotnetCliTool tonuget推送的CLI应用程序]

     

MyAppNameSpace.Core [此​​项目由CLI工具引用]

     

MyAppNameSpace.Common [解决方案中共享的公共项目]

     

MyAppNameSpace.Vsix [Visual studio扩展名]

我想要实现的是将CLI项目作为DotnetCliTool推送到nuget。我跟着提到here。我找不到任何dotnet cli工具项目的样本,并且在解决方案中引用了另一个项目。

问题是我在执行nuget push后执行dotnet pack。该包已成功推送到nuget,但其项目依赖项被列为包依赖项。因此,当我在任何项目中将此工具作为DotnetClitToolReference引用时,它开始在Nuget上查找那些显然不存在的依赖项目。

这是我的CLI项目的csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <AssemblyName>dotnet-nmg</AssemblyName>
    <Authors>Nabin Karki Thapa</Authors>
    <Version>1.0.2</Version>
    <Description>
      The CLI tool for NModelsGenerator, a visual studio extension to create POCO classes from Database Tables and Views.
    </Description>
    <DebugType>portable</DebugType>
    <Copyright>Nabin Karki Thapa</Copyright>
    <PackageTags>dotnet cli tool</PackageTags>
    <PackageType>DotnetCliTool</PackageType>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <PackageProjectUrl>https://github.com/nabinked/NModelsGenerator</PackageProjectUrl>
    <PackageLicenseUrl>https://github.com/nabinked/NModelsGenerator/blob/master/LICENSE</PackageLicenseUrl>
    <RepositoryUrl>https://github.com/nabinked/NModelsGenerator</RepositoryUrl>
    <RepositoryType>git</RepositoryType>
    <PackageReleaseNotes>More information is available at https://github.com/nabinked/NModelsGenerator </PackageReleaseNotes>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.CommandLineUtils" Version="1.1.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\NModelsGenerator.Common\NModelsGenerator.Common.csproj" />
    <ProjectReference Include="..\NModelsGenerator.Core\NModelsGenerator.Core.csproj" />
  </ItemGroup>

  <Target Name="PostcompileScript" AfterTargets="Pack" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
    <Exec Command="call nugetpush $(Configuration) $(MSBuildProjectDirectory)/bin/$(Configuration)/$(AssemblyName).$(Version).nupkg" />
  </Target>
</Project>

我做错了什么?关于此主题的在线文档很少。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

  

将一个DotnetCliTool控制台项目推送到nuget列出它作为包依赖项的项目依赖项

你没有做错任何事。这是一个关于dotnet pack的已知问题,不包括参考项目。这肯定会在将来的版本中解决。

有关详细信息,请参阅Allow project reference DLLs to be added to the parent nupkg for pack target like IncludeReferencedProjects in nuget.exe

目前的解决方法是使用自定义的msbuild目标来执行#3891 (comment)中描述的 dasMulli

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludeP2POutput</TargetsForTfmSpecificBuildOutput>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\testprivatelib\testprivatelib.csproj" PrivateAssets="All" />
  </ItemGroup>
  <Target Name="IncludeP2POutput">
    <ItemGroup>
      <BuildOutputInPackage Include="$(OutputPath)\testprivatelib.dll" />
    </ItemGroup>
  </Target>
</Project>

希望这有帮助。