标签: packagereference

带有PackageReferences的ClickOnce应用程序自动到先决条件

如何自动将ClickReference软件包包含在ClickOnce中?

我正在尝试从packages.config转换ClickOnce应用程序以使用PackageReferences,因为我有一个很好的30+ nuget包(主要是依赖项),它使我更容易升级我实际需要引用的少数几个.

问题是,一旦我这样做,所有nuget包程序集现在都被认为是"先决条件(自动)"而不是"包含(自动)",使ClickOnce部署跳过它们.它还为我提供了"......必须经过强签名才能被标记为任何自定义nuget包的先决条件".

更新:

事实证明,这根本不起作用.ClickOnce,period不包括System.Runtime等程序集.没有包含它的选项,即使在手动将所有程序集设置为Include之后,它也最终破坏了部署(由于System.Runtime的FileNotFoundException).我不得不恢复到packages.config.我希望看到ClickOnce更新以使用PackageReferences

c# clickonce nuget visual-studio-2017 packagereference

11
推荐指数
0
解决办法
1027
查看次数

从packages.config 迁移到PackageReferences 导致无法加载文件或程序集“...”或其依赖项之一。访问被拒绝

将我们的项目升级到 PackageReferences 后,我在构建服务器(本地 AzureDevOps 代理)上面临以下问题

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Xaml.targets(193,5): 
Error XC1000: XC1020: Build error occurred in the XAML MSBuild task: 
'Could not load file or assembly 'file:///C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Threading.ThreadPool.dll'
 or one of its dependencies. Access is denied.'"
Run Code Online (Sandbox Code Playgroud)

对于不同的 Dll,这是随机发生的(50% 的时间)。这些 dll 位于不同的目录中:Nuget 还原目录、参考程序集或任何其他代码 dll。

在服务器上,我们使用的是 VS 2017。

现在,当我将项目迁移到 PackageReferences 时,这开始发生。在此之前,我们从未遇到过拒绝访问的任何问题。这是具有相同构建基础结构的完全相同的代码库。

我试图做的:

  • 我试图检查进程监视器,但那里没有“拒绝访问”条目。我可以看到它被正确读取
  • 为了安全起见,我在本地机器上安装了代理,看看这是否不是构建机器的问题,它也确实发生在那里
  • 当我们使用 MSBuild 或 Visual Studio 在本地构建时不会发生这种情况

任何想法,将不胜感激。至少要指出解决的方向。

[更新]

我们实际上有 3 天没有在服务器上发生问题,现在它又回来了。

在使用 msbuild(PS 脚本)在本地构建时,我们还“设法”获得了一次。从该本地构建和下一个(紧接着触发的传递)的外观来看,我们设法看到 nuget 正在下载在前一个(失败的)构建中成功下载的包。我们没有观察到连续传递构建的行为。除非清理,否则 Nuget 不会每次都下载新包。

[Update2] Nuget 恢复步骤和构建步骤的调试日志文件。

驱动器

谢谢

.net msbuild nuget azure-devops packagereference

11
推荐指数
1
解决办法
1070
查看次数

强制更新可传递 nuget 包依赖项的最佳方法?

考虑一个 .NET Core 应用程序 ( A),它B使用PackageReference模型引用第三方 nuget 包 ( ) 。包B对另一个包 ( C)有自己的依赖:

A -> B -> C
Run Code Online (Sandbox Code Playgroud)

B声明依赖于C版本约束为>= 1.0.0. A没有编译时使用C并且不直接引用它 -C是一个可传递的运行时依赖项。

但是,包的 1.0.0 版C(由构建选择)有一个错误。该错误已在更新的版本中得到修复,发布到 nuget 并增加了次要版本(例如 v1.1.0)。

默认情况下,我的构建不会选择这个最新版本。我相信这是由于“最低适用版本”规则,这里描述:https : //docs.microsoft.com/en-us/nuget/concepts/dependency-resolution#dependency-resolution-rules

强制构建选择错误修复 1.1.0 版本的包的推荐方法是什么C

一种解决方案是CA. 然而,这感觉就像我打破了封装,因为A不应该需要知道任何关于C.

理想情况下,包的作者B会更新他们对C使用较新版本的依赖,但我对这个包没有任何控制权。

我还尝试Directory.Build.props在解决方案的根目录使用一个文件,尝试强制在整个解决方案中更新版本:

  <ItemGroup>
    <PackageReference Update="SomePackage.C" Version="1.1.0" …
Run Code Online (Sandbox Code Playgroud)

nuget .net-core packagereference

10
推荐指数
1
解决办法
940
查看次数

2017年视觉工作室中的nuget包参考蓝色图标

出于某种原因,在我的控制台应用程序中,我通过nuget安装的几个引用显示了蓝色nuget图标.我可以在本地构建我的项目,但不是在将项目部署到云之后.错误消息msg抱怨无法找到这2个引用.似乎我无法通过右键单击删除它们(没有删除选项avaialble).任何的想法?

在此输入图像描述

nuget nuget-package visual-studio-2017 packagereference

9
推荐指数
1
解决办法
4158
查看次数

NuGet 包显示没有依赖项?

我尝试从 .NET 4.7.2 类库 (VS2017) 制作 NuGet 包,但结果 NuGet 包令人惊讶地显示没有依赖项(这是一个错误)。

我的设置是这样的:

  • 我的类库是 .NET Framework 4.7.2
  • 我的类库使用另一个NuGet 包(具有依赖项)。
  • 我的类库在 .csproj 中使用packageReferences
  • 我的类库包含一个正确的 .nuspec 文件
  • 我使用nuget.exe 包来创建包

nuget.exe包命令应自动填写所需的依赖-这也曾经是较早(在其他项目中)的情况。但是,当时我在我的类库中使用了packages.config而不是packageReferences。这有什么改变吗?

到底是怎么回事?

如何强制系统再次在我的包中包含所需的依赖项?

笔记:

  • 该包由我们 TeamCity 构建服务器(不带 VS2017)上的 MSBuild 脚本构建。构建脚本同时调用“nuget.exe restore”和后来的 “nuget.exe pack”作为其构建逻辑的一部分。

  • MSBuild 是 15.7 版

  • nuget.exe 是版本 4.6.2

.net nuget visual-studio-2017 packagereference .net-4.7.2

9
推荐指数
1
解决办法
7504
查看次数

禁用特定 MsBuild 项目的传递 PackageReference 依赖项

我正在将旧样式的 MsBuild csproj 项目迁移为使用 PackageReference 格式,但遇到了传递依赖项的问题。

请考虑以下项目 A 引用 NuGet 包 B 和 C,每个项目都包含一个使用 PackageReference 的程序集。在构建项目 A 上,使用 IL 合并将 B 作为公共符号合并到 A 程序集中,将 C 作为内部化符号合并。项目 D 有一个对 A 的项目引用。

传递依赖情况 D 引用 A、B 和 C。构建 D 时,会发生类型错误 CS0433: 类型 'X' 存在于 'A' 和 'B' 中的编译错误。

在上面的场景中,有没有办法强制 D 不添加对 B 或 C 的显式引用?

msbuild nuget transitive-dependency visual-studio-2017 packagereference

8
推荐指数
1
解决办法
7560
查看次数

Nuget:将多个大型解决方案迁移到 PackageReference

背景

我正在处理一个包含多个大型解决方案的大型项目。总而言之,我们有超过 400 个 C# 项目。过去,我们将 Nuget 与packages.config文件一起用于我们的依赖项。现在我们要将所有项目迁移到新PackageReference格式。

问题

我知道 Visual Studio 提供了将单个项目从格式迁移packages.configPackageReference格式的解决方案,但我不知道可以一次迁移多个 Visual Studio 解决方案的解决方案。我不需要 Visual Studio 的兼容性检查,因为所有使用的包都与新格式兼容。

是否有一种方便的方法可以一次packages.config将多个 Visual Studio 解决方案从PackageReference格式迁移到格式?

.net migration visual-studio nuget packagereference

8
推荐指数
1
解决办法
1623
查看次数

NuGet 包引用复制 dll 本地

我需要将 NuGet dll 的 Copy Local 设置为 false。在此之前,我使用了package.config格式,一切正常。迁移到包参考格式后,我找不到如何做到这一点的方法。有人可以帮助我吗?

c# visual-studio nuget nuget-package packagereference

8
推荐指数
1
解决办法
1万
查看次数

使用 PackageReference 引用 NuGet 包子文件夹中的 DLL

我们正在将项目从packages.config升级到PackageReference结构。引用的包之一在子文件夹中包含 DLL,例如:

  • lib\net45\some.dll
  • lib\net45\xxx\other.dll

当使用packages.config从项目中引用此包时,该包的所有DLL都作为引用包含在项目中,并且工作正常。使用 PackageReference 时,它​​似乎只能识别根文件夹 (lib\net45) 中的 DLL。对于使用子文件夹中 DLL 的功能的所有内容,我们都会遇到构建错误。有没有办法告诉 NuGet 在使用 PackageReference 时考虑 NuGet 包的子文件夹?

.net nuget packagereference

7
推荐指数
0
解决办法
525
查看次数

无法与PackageReference一起使用“ MSBuild.ILMerge.Task”

MSBuild.ILMerge.Task通过packagereference以下引用使用引用时出现错误:

error MSB4018: The "MSBuild.ILMerge.Task" task failed unexpectedly.
error MSB4018: System.IO.FileNotFoundException: Cannot find ILMerge 
executable.
error MSB4018:    at MSBuild.ILMerge.Task.LoadILMerge()
error MSB4018:    at MSBuild.ILMerge.Task.Execute()
error MSB4018:    at error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()
Run Code Online (Sandbox Code Playgroud)

这是因为MSBuild.ILMerge.Task.dll在其程序包位置找不到ILMerge可执行文件。我想这可能是因为package.config和PackageReference之间的文件夹结构不同。

其他人遇到过这个问题吗?任何帮助都需要提前感谢

msbuild ilmerge packagereference

6
推荐指数
1
解决办法
1633
查看次数