Nuget "Manage Packages" 对话框。项目名称混淆
Nuget "Manage Packages" dialog. Project names are mixed up
我有一个 Visual Studio 2017 解决方案,其中包含多个 C# class 库项目。在磁盘上,它们采用这种结构:
MyProduct
MyCompany
MyCompany.ModuleA
MyCompany.ModuleB
MyCompany.ModuleC
但是当我在“Manage NuGet Packages for Solution”中查看它们时,复选框在对话框中的显示不一致。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 个模块中的每一个看起来都是一致的。
- NuGet 如何决定在“管理解决方案包”对话框中放入什么名称?
- 为什么 NuGet 在输出文件夹中为模块 C 而不是模块 A 或 B 创建这些临时文件?
How does NuGet decide what name to put in the Manage Packages for Solution dialog?
这取决于 NuGet 管理器类型,packages.config
或 PackageReference
。
如果项目使用 packages.config
,项目名称将放在“管理解决方案包”对话框中。如果项目使用PackageReference
,项目文件名和相对路径将被放入其中。那是因为当我们使用 PackageReference
安装 nuget 包时,NuGet 将更新项目文件 .csproj
。因此,在“管理解决方案包”对话框中,它显示相对路径+项目文件名,如 ClassLibrary1\ClassLibrary1.csproj
.
Why is NuGet creating those temporary files in the output folder for
Module C but not Module's A or B?
因为带有 PackageReference
的 NuGet 控制为这些文件生成的 msbuild 项目进入 obj\projectname.csproj.nuget.g.props
、obj\projectname.csproj.nuget.g.targets
和 project.assets.json
文件。
您可以卸载您的项目,检查项目文件是否MyCompany.ModuleC
使用PackageReference
,如:
<ItemGroup>
<PackageReference Include="Newtonsoft.Json">
<Version>11.0.2</Version>
</PackageReference>
</ItemGroup>
更多详情请查看官方博客:NuGet is now fully integrated into MSBuild.
我有一个 Visual Studio 2017 解决方案,其中包含多个 C# class 库项目。在磁盘上,它们采用这种结构:
MyProduct
MyCompany
MyCompany.ModuleA
MyCompany.ModuleB
MyCompany.ModuleC
但是当我在“Manage NuGet Packages for Solution”中查看它们时,复选框在对话框中的显示不一致。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 个模块中的每一个看起来都是一致的。
- NuGet 如何决定在“管理解决方案包”对话框中放入什么名称?
- 为什么 NuGet 在输出文件夹中为模块 C 而不是模块 A 或 B 创建这些临时文件?
How does NuGet decide what name to put in the Manage Packages for Solution dialog?
这取决于 NuGet 管理器类型,packages.config
或 PackageReference
。
如果项目使用 packages.config
,项目名称将放在“管理解决方案包”对话框中。如果项目使用PackageReference
,项目文件名和相对路径将被放入其中。那是因为当我们使用 PackageReference
安装 nuget 包时,NuGet 将更新项目文件 .csproj
。因此,在“管理解决方案包”对话框中,它显示相对路径+项目文件名,如 ClassLibrary1\ClassLibrary1.csproj
.
Why is NuGet creating those temporary files in the output folder for Module C but not Module's A or B?
因为带有 PackageReference
的 NuGet 控制为这些文件生成的 msbuild 项目进入 obj\projectname.csproj.nuget.g.props
、obj\projectname.csproj.nuget.g.targets
和 project.assets.json
文件。
您可以卸载您的项目,检查项目文件是否MyCompany.ModuleC
使用PackageReference
,如:
<ItemGroup>
<PackageReference Include="Newtonsoft.Json">
<Version>11.0.2</Version>
</PackageReference>
</ItemGroup>
更多详情请查看官方博客:NuGet is now fully integrated into MSBuild.