Nuget的“管理软件包”对话框。项目名称混在一起

时间:2018-06-20 04:48:36

标签: visual-studio-2017 nuget nuget-package-restore

我有一个Visual Studio 2017解决方案,其中包含几个C#类库项目。在磁盘上,它们采用以下结构:

MyProduct
    MyCompany
        MyCompany.ModuleA
        MyCompany.ModuleB
        MyCompany.ModuleC

但是,当我在“管理解决方案的NuGet程序包”中查看它们时,复选框不一致地显示在对话框中。ModuleC看起来很奇怪。像这样:

MyCompany.ModuleA
MyCompany.ModuleB
MyProduct\MyCompany\MyCompany.ModuleC

此外,每当我构建模块C时,它都会在其输出/ obj文件夹中继续创建以下3个文件

 - MyCompany.ModuleC.csproj.nuget.g.props
 - MyCompany.ModuleC.csproj.nuget.g.targets 
 - project.assets.json

其他两个模块都不这样做。

我正在尝试理解不一致的原因,并在可能的情况下予以解决。我曾尝试梳理这些项目的.csproj文件的文本,但无法发现可能导致这种情况的任何差异。 .SLN文件项目条目的原始文本对于这3个模块中的每一个都看起来是一致的。

  1. NuGet如何确定在“管理解决方案的软件包”对话框中输入什么名称?
  2. NuGet为什么要在模块C的输出文件夹中创建这些临时文件,而不在模块A或B的输出文件夹中创建这些临时文件?

1 个答案:

答案 0 :(得分:2)

  

NuGet如何决定在“管理解决方案的软件包”对话框中输入什么名称?

这取决于NuGet管理器类型packages.configPackageReference

如果项目使用packages.config,则项目名称将放在“管理解决方案的软件包”对话框中。如果项目使用PackageReference,则会在其中放入项目文件名和相对路径。那是因为当我们使用.csproj安装nuget软件包时,NuGet将更新项目文件PackageReference。因此,在“管理解决方案的软件包”对话框中,它显示相对路径+项目文件名,例如ClassLibrary1\ClassLibrary1.csproj

  

NuGet为什么在输出文件夹中为这些临时文件创建这些临时文件?   模块C但不是模块A或B?

因为带有PackageReference的NuGet会将为这些文件生成的msbuild项控制到obj\projectname.csproj.nuget.g.propsobj\projectname.csproj.nuget.g.targetsproject.assets.json文件中。

您可以卸载项目,检查项目文件MyCompany.ModuleC是否使用PackageReference,例如:

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json">
      <Version>11.0.2</Version>
    </PackageReference>
  </ItemGroup>

有关更多详细信息,请访问以下官方博客:NuGet is now fully integrated into MSBuild