【问题标题】:Replace asp.net core NuGet packages with local dll files用本地 dll 文件替换 asp.net core NuGet 包
【发布时间】:2019-12-20 14:30:02
【问题描述】:

我正在尝试摆脱 nuget 包,并且项目中只有本地 dll 文件。

我已经排除了这些包

<PackageReference Include="Microsoft.AspNetCore" Version="2.1.7" />
<PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore.HttpsPolicy" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.3" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />

所以,我已经构建了我的解决方案并导入了项目中的所有 dll。我可以编译它,但是服务器说:

处理请求时发生未处理的异常。 InvalidOperationException:未找到视图“索引”。搜索了以下位置:...

但是与 nuget 相同会使工作正常。向项目中添加 dll 的替代方法是什么?

我见过this,但在我的情况下,当我将所有 dll 放在一个文件夹中时,我有太多同名文件(冲突)

【问题讨论】:

  • 从指定的错误中听起来您缺少cshtml 文件?在您的项目中,您有一个Views 文件夹吗?
  • 它就在那里,它有效。直到我删除这些包引用并将 dll 从构建文件夹中放入。
  • 一些 NuGet 包将重要元素添加到您的项目文件中,并带有针对诸如 MVC 视图之类的特殊构建说明。我会仔细查看您的项目文件的 XML,看看是否还有东西在尝试引用 packages 文件夹。另一方面:这感觉就像你在与技术进步的潮流背道而驰,这通常最终成为错误的决定。您是否考虑过这是否是一个“XY 问题”,您正在询问解决方案,但您已经为您要解决的潜在问题选择了错误的解决方案?
  • 关于您在下面的评论,您正在这样做是因为您的构建服务器显然不支持从 NuGet 恢复:修复它而不是尝试解决它 - 您不想签入所有二进制形式的依赖项(或必须依赖于在构建服务器上重新创建文件夹结构)。
  • 备份@StriplingWarrior 和germi 所说的——你正试图解决错误的问题。你应该让你的构建服务器使用 NuGet,而不是摆脱 NuGet。

标签: c# asp.net asp.net-mvc visual-studio-2017 nuget


【解决方案1】:

您可以随时添加 NUget 源,它是您驱动器中的本地文件夹,并将其设置为默认或唯一的依赖源。

这里有更多细节Local feeds

【讨论】:

  • 由于我们的构建服务器,我需要避免使用 nuget
  • 本地 Nuget 可以指向相对路径。这将适用于构建服务器和本地。如果你在回购中拥有一切
  • @mognurodro 无法处理 nuget 的构建服务器基本上已损坏。你需要得到另一个或修复它。拥有本地存储库仍然会有所帮助(曾经拯救过我的皮肤),但您应该将重点放在这个问题上。
【解决方案2】:

用本地 dll 文件替换 asp.net core NuGet 包。什么是 将dll添加到项目中的替代方法? 我正在尝试摆脱 nuget 包并且只有本地 dll 文件 在项目中。

Nuget 是管理项目程序集的推荐方法。当您可以访问 Internet 时,使用 nuget 非常适合您的情况。

但是根据您的another post 这里,您正在尝试在没有互联网的环境中开发/构建项目。如果是这样,我们仍然可以在这种情况下使用 nuget:

Step1:清除VS=>Tools=>Options=>Nuget Package Manager=>General中的所有Nuget缓存。 (您曾经在VS中使用过的所有包都缓存在%userprofile%\.nuget\packages中,我们可以使用nuget store轻松恢复包,所以请随时清除缓存)

Step2:删除你当前项目的bin and obj文件夹,然后只为你当前项目恢复包。(nuget restoredotnet restore或者干脆在VS中重建项目,VS会为你恢复包)

Step3:现在让我们导航到%userprofile%\.nuget\packages 文件夹,现在packages 文件夹中的每个包都是您当前项目所依赖的。让我们将文件夹名称从packages 重命名为mypackages。现在您的项目需要的所有包(程序集)都在mypackages 文件夹中。

步骤 4:然后我们可以将此文件夹复制/移动到您的项目文件夹中。我们可以将此文件夹添加到源代码管理中或根据您的实际需要添加。您可以随意将您的项目部署到另一台服务器(无互联网)并继续您的工作。

至于如何引用它们,您可以从mypackages文件夹中获取您需要的程序集并手动引用它们。(添加=>引用=>...)。或者用nuget这个更好的方法,将你的mypackages文件夹所在的路径添加到Package Source,即使在没有互联网的环境下,你也可以轻松地为你的项目恢复包。

希望对您有所帮助,如果您需要任何进一步的信息或支持,请随时告诉我 :)

【讨论】:

    【解决方案3】:

    可能缺少对Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 的引用。您可以为此包添加 dll,然后编译项目或解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      相关资源
      最近更新 更多