C# Nuget pack-Microsoft教程中的多个错误

C# Nuget pack-Microsoft教程中的多个错误,c#,nuget,visual-studio-2019,C#,Nuget,Visual Studio 2019,在这之后。我正在使用VS2019 在我找到NuGet pack之前一切都很好。我得到以下错误: “C:\Users\erics\source\repos\AppLogger.vs\AppLogger\v16\Server\sqlite3\db.lock”,因为另一个进程正在使用它 在“我的所有项目”中自动创建.vs文件夹。如果关闭VS并删除该文件夹,则会重新创建该文件夹。如果我关闭解决方案,然后再次尝试打包,我会得到: 警告:NU5100:程序集“AppLogger\bin\Debug\AppL

在这之后。我正在使用VS2019

在我找到NuGet pack之前一切都很好。我得到以下错误:

“C:\Users\erics\source\repos\AppLogger.vs\AppLogger\v16\Server\sqlite3\db.lock”,因为另一个进程正在使用它

在“我的所有项目”中自动创建.vs文件夹。如果关闭VS并删除该文件夹,则会重新创建该文件夹。如果我关闭解决方案,然后再次尝试打包,我会得到:

警告:NU5100:程序集“AppLogger\bin\Debug\AppLogger.dll”不在“lib”文件夹中,因此在将包安装到项目中时,不会将其添加为引用。如果需要引用,请将其移动到“lib”文件夹中

警告:NU5100:程序集“AppLogger\bin\Release\AppLogger.dll”不在“lib”文件夹中,因此在将程序包安装到项目中时,不会将其添加为引用。如果需要引用,请将其移动到“lib”文件夹中

警告:NU5100:程序集“AppLogger\obj\Debug\AppLogger.dll”不在“lib”文件夹中,因此在将程序包安装到项目中时,不会将其添加为引用。如果需要引用,请将其移动到“lib”文件夹中

警告:NU5100:程序集“AppLogger\obj\Release\AppLogger.dll”不在“lib”文件夹中,因此在将程序包安装到项目中时,不会将其添加为引用。如果需要引用,请将其移动到“lib”文件夹中


NuGet文档是在SDK风格的项目存在之前(在创建.NETCore之前)编写的,并且大部分文档从那时起就没有更新过。因此,这些教程已经过时了

创建NuGet软件包的30秒教程:

创建“类库(.NET Core)”项目,即使您希望以.NET Framework为目标。您也可以使用
dotnetnewclasslib
从命令行执行此操作。如果要以.NET Framework为目标,请在解决方案资源管理器中右键单击该项目,然后选择“编辑项目文件”(或在您最喜爱的文本编辑器中编辑csproj),然后将
netcoreapp2.2
更改为
net472
,或者更改为所需的任何.NET Framework版本(删除点,以便4.7.2为472,4.7为47,而不是470)。最后,在解决方案资源管理器中右键单击该项目并选择“打包”,或从命令行运行
dotnetpack


打包SDK样式的项目(或带有MSBuild包目标的传统项目)比使用
nuget.exe包
和nuspec文件要好得多,所以我强烈建议改用它。我们(NuGet团队)真的需要找时间更新文档。

我已经检查了教程并复制了相同的问题

当VS在当前项目AppLogger打开的情况下运行时,它将使用.VS文件夹。(创建一个新的解决方案,并导航到SolutionDir,您可以发现.vs被vs占用,因为在vs运行时我们将无法删除它)

根据此错误消息,当使用nuget pack命令时,它还将尝试从.vs文件夹中读取一些数据但是.vs已被vs占用,nuget.exe无法访问它。因此发生错误

我认为需要在文件中添加一些注释,如:

注意:要成功运行nuget pack xxx.nuspec,应先关闭VS实例。

如果我关闭解决方案,然后再次尝试打包,我会收到警告:

警告指示要打包的程序集应复制到lib文件夹,以便加载此程序包的项目可以获取该程序集。重新读取此错误消息的简单方法是:
在项目文件夹中创建一个lib文件夹,并将xxx.dll复制到其中。然后再次使用nuget pack命令。

然后,我们创建的xxx.nupkg包含该程序集。 创建一个新的.net fx项目,加载xxx.nupkg,现在我们可以正确引用AppLogger.dll了

(此外,警告仍将显示:警告:程序集'lib\AppLoggerSampleMyTest.dll'直接放置在'lib'文件夹下。建议将程序集放置在特定于框架的文件夹中。将其移动到特定于框架的文件夹中。)但这只是一个警告,建议帮助创建更好的nuget包结构

根据您最后的评论,您正在本地开发人员中工作。这样,您就不必为这种情况创建nuget包。我认为类库项目模板本身就足以满足您的情况


(如果它们在同一个解决方案中,右键单击project=>add=>reference,如果不在同一个解决方案中,您可以右键单击solution=>add existing project以包含类库项目)

“我们(NuGet团队)确实需要找时间更新文档。”-谢谢!非常感谢。非常感谢。我不能告诉你听到这个有多好。我将尝试您的30秒教程,看看它是如何运行的。“打包SDK样式的项目(或使用MSBuild包目标的传统项目)比使用nuget.exe包和nuspec文件有很大的改进,因此我强烈建议改为使用它。”您能给我指一个您认为有意义的教程吗?对不起,我不知道。但是msbuild包目标支持更多的场景,其目的是客户不需要创建nuspec文件,至少99%的包不需要创建nuspec文件。使用
nuget.exe pack
仅对各种场景提供有限的支持,这意味着更常见的情况是需要创建一个nuspec文件,并且当包不符合nuget约定时会导致包兼容性问题。看起来我所需要做的就是按类项目构建,转到我要在其中使用该类项目的解决方案,创建对该类项目生成的.dll的引用,然后使用它。这在本地开发环境中似乎可以正常工作。您不应该直接引用dll。如果项目引用位于同一解决方案中,请使用该项目引用,或者使用Package