【问题标题】:Nuget pack - Multiple errors with Microsoft tutorialNuget pack - Microsoft 教程的多个错误
【发布时间】:2019-06-17 18:02:33
【问题描述】:

跟随Microsoft tutorial on NuGet .NET Framework here。我正在使用 VS 2019。

在我使用 NuGet 包之前一切正常。我收到以下错误:

'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”文件夹中。

【问题讨论】:

  • 嗨,Eric,这个问题有什么更新吗?请检查此问题是否已解决,如果仍然存在,请随时与我们联系。
  • @Lance Li-MSFT 请在下面查看 zivkan 的回答。
  • 您好,我已经检查过了,既然它解决了您的问题,为什么不考虑将其标记为已接受的答案。此外,您可以在下面添加您的答案,因为您似乎不再坚持它了:)
  • @Lance Li-MSFT 我想。对我来说不是一个聪明的**。这是一个诚实的问题。向 MSFT 施压以更新他们的实际文档而不是让文档过时并迫使 Stack 用户更新他们的 Stack 问题不是更有意义吗?实际上,我想在 MSFT 更新他们的文档之前,我不会回答这个问题。完成后请告诉我,我将指出更新的文档/教程并关闭问题。
  • 您好,朋友,请查看this link,我们总是可以在那里播种有关 nuget 文档的反馈。我建议你可以在那里打开新线程并让他们知道。

标签: c# nuget visual-studio-2019


【解决方案1】:

NuGet 文档是在 SDK 样式项目存在之前(在创建 .NET Core 之前)编写的,并且从那以后大部分都没有更新。因此教程已经过时了。

我创建 NuGet 包的 30 秒教程:

创建一个“类库 (.NET Core)”项目,即使您想以 .NET Framework 为目标。您也可以使用dotnet new classlib 从命令行执行此操作。如果您想以 .NET Framework 为目标,请右键单击解决方案资源管理器中的项目,然后选择“编辑项目文件”(或在您喜欢的文本编辑器中编辑 csproj)并将 <TargetFramework>netcoreapp2.2</TargetFramework> 更改为 <TargetFramework>net472</TargetFramework>,或任何 .NET您想要的框架版本(删除点,因此 4.7.2 是 472,4.7 是 47,而不是 470)。最后,在解决方案资源管理器中右键单击项目并选择打包,或从命令行运行dotnet pack

打包 SDK 风格的项目(或带有 MSBuild 包目标的传统项目)比使用 nuget.exe pack 和 nuspec 文件有很大改进,所以我强烈建议改用它。我们(NuGet 团队)确实需要时间来更新文档。

【讨论】:

  • “我们(NuGet 团队)确实需要时间来更新文档。” - 谢谢!谢谢!谢谢!我不能告诉你这有多好听。我会试试你的 30 秒教程,看看效果如何。
  • “打包 SDK 样式项目(或带有 MSBuild 包目标的传统项目)比使用 nuget.exe 包和 nuspec 文件有了很大改进,因此我强烈建议改用它。”你能指点我一个你认为有意义的教程吗?
  • 对不起,我不知道。但是 msbuild pack 目标支持更多场景,目标是客户永远不需要创建 nuspec 文件,至少对于 99% 的包来说。使用nuget.exe pack,对各种场景的支持有限,这意味着更常见的是需要创建一个 nuspec 文件,并且当包不符合 nuget 约定时会导致包兼容性问题。
  • 看起来我需要做的就是按类项目构建,转到我想在其中使用该类项目的解决方案,创建对类项目构建创建的 .dll 的引用,然后使用它。这在本地开发环境中似乎可以正常工作。
  • 你不应该直接引用 dll。如果项目引用在同一个解决方案中,则使用项目引用;如果它在不同的解决方案中,则使用包引用。如果您直接引用 dll,那么您将需要以特定顺序构建项目,MSBuild 不会知道,因此无法自动为您完成。
【解决方案2】:

我检查了教程并重现了同样的问题。

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

根据这个错误信息,当使用 nuget pack 命令时,它也会尝试从 .vs 文件夹中读取一些数据。 但是.vs已经被VS占用,nuget.exe无法访问。所以出现错误。

我认为它需要在文档中添加一些额外的注释,例如:

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

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

警告表明您要打包的程序集应复制到 lib 文件夹,以便加载此包的项目可以获取程序集。解决此错误消息的简单方法是:Create a lib folder in the project folder and copy the xxx.dll into it. Then use the nuget pack command again.

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

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

根据您上次的评论,您正在从事本地开发开发工作。那么您不必为这种情况创建 nuget 包。我认为类库项目模板本身就足以满足您的情况。

(如果在同一个解决方案中,右键项目=>添加=>引用,如果不在同一个解决方案中,您可以右键单击解决方案=>添加现有项目以包含类库项目)

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多