【发布时间】:2018-11-15 10:01:35
【问题描述】:
我对创建 NuGet 包的过程还很陌生。我最近通过 NuGetPackageExplorer 创建了一个 NuGet 包。 “Package Metadata”视图有一个“Framework Assembly References”部分,其值为“Microsoft.CSharp (Any,Verion=0.0)”。这是 nuspec 文件的样子:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>My.Cool.NuGet.Package</id>
<version>1.0.2</version>
<title></title>
<authors>John Smith</authors>
<owners>John Smith</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>My cool NuGet package</description>
<frameworkAssemblies>
<frameworkAssembly assemblyName="Microsoft.CSharp" />
</frameworkAssemblies>
</metadata>
</package>
您能否解释一下以下维度的关系、依赖关系和约束:
- NuGet 包的源 .NET 项目的目标框架版本
- nuspec 文件的frameworkAssemblies 部分
- 安装 NuGet 包的项目的目标框架版本
上面nuspec中的frameworkAssembly值在NuGetPackageExplorer中显示如下:
程序集名称:Microsoft.CSharp
支持的框架:Any,Version=v0.0
这是否意味着 NuGet 包旨在与 .NET 框架版本无关?有没有我想在本节中明确说明特定版本的情况?我问的原因是我昨天在一个 MVC 项目中安装了一个 NuGet 包,我遇到了一些奇怪的行为。具体来说:
- NuGet 包显示为已安装并显示在引用列表中
- 我能够将 using 指令添加到 NuGet 包的命名空间
但是,当我尝试运行应用程序时,编译器针对这些 using 指令显示“找不到命名空间类型”的错误。但是随后编译器错误消失了,但应用程序不会运行先前编译器错误的 b/c。在我修改了 MVC 项目和 NuGet 包源项目的版本设置后,我能够绕过这个错误。所以现在我试图了解关于目标框架我需要考虑和配置的更详细的细节。
【问题讨论】:
标签: c# .net asp.net-mvc nuget