如何自动将ClickReference软件包包含在ClickOnce中?
我正在尝试从packages.config转换ClickOnce应用程序以使用PackageReferences,因为我有一个很好的30+ nuget包(主要是依赖项),它使我更容易升级我实际需要引用的少数几个.
问题是,一旦我这样做,所有nuget包程序集现在都被认为是"先决条件(自动)"而不是"包含(自动)",使ClickOnce部署跳过它们.它还为我提供了"......必须经过强签名才能被标记为任何自定义nuget包的先决条件".
更新:
事实证明,这根本不起作用.ClickOnce,period不包括System.Runtime等程序集.没有包含它的选项,即使在手动将所有程序集设置为Include之后,它也最终破坏了部署(由于System.Runtime的FileNotFoundException).我不得不恢复到packages.config.我希望看到ClickOnce更新以使用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 时,这开始发生。在此之前,我们从未遇到过拒绝访问的任何问题。这是具有相同构建基础结构的完全相同的代码库。
我试图做的:
任何想法,将不胜感激。至少要指出解决的方向。
[更新]
我们实际上有 3 天没有在服务器上发生问题,现在它又回来了。
在使用 msbuild(PS 脚本)在本地构建时,我们还“设法”获得了一次。从该本地构建和下一个(紧接着触发的传递)的外观来看,我们设法看到 nuget 正在下载在前一个(失败的)构建中成功下载的包。我们没有观察到连续传递构建的行为。除非清理,否则 Nuget 不会每次都下载新包。
[Update2] 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?
一种解决方案是C从A. 然而,这感觉就像我打破了封装,因为A不应该需要知道任何关于C.
理想情况下,包的作者B会更新他们对C使用较新版本的依赖,但我对这个包没有任何控制权。
我还尝试Directory.Build.props在解决方案的根目录使用一个文件,尝试强制在整个解决方案中更新版本:
<ItemGroup>
<PackageReference Update="SomePackage.C" Version="1.1.0" …Run Code Online (Sandbox Code Playgroud) 出于某种原因,在我的控制台应用程序中,我通过nuget安装的几个引用显示了蓝色nuget图标.我可以在本地构建我的项目,但不是在将项目部署到云之后.错误消息msg抱怨无法找到这2个引用.似乎我无法通过右键单击删除它们(没有删除选项avaialble).任何的想法?
我尝试从 .NET 4.7.2 类库 (VS2017) 制作 NuGet 包,但结果 NuGet 包令人惊讶地显示没有依赖项(这是一个错误)。
我的设置是这样的:
该nuget.exe包命令应自动填写所需的依赖-这也曾经是较早(在其他项目中)的情况。但是,当时我在我的类库中使用了packages.config而不是packageReferences。这有什么改变吗?
到底是怎么回事?
如何强制系统再次在我的包中包含所需的依赖项?
笔记:
该包由我们 TeamCity 构建服务器(不带 VS2017)上的 MSBuild 脚本构建。构建脚本同时调用“nuget.exe restore”和后来的 “nuget.exe pack”作为其构建逻辑的一部分。
MSBuild 是 15.7 版
nuget.exe 是版本 4.6.2
我正在将旧样式的 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
背景
我正在处理一个包含多个大型解决方案的大型项目。总而言之,我们有超过 400 个 C# 项目。过去,我们将 Nuget 与packages.config文件一起用于我们的依赖项。现在我们要将所有项目迁移到新PackageReference格式。
问题
我知道 Visual Studio 提供了将单个项目从格式迁移packages.config到PackageReference格式的解决方案,但我不知道可以一次迁移多个 Visual Studio 解决方案的解决方案。我不需要 Visual Studio 的兼容性检查,因为所有使用的包都与新格式兼容。
题
是否有一种方便的方法可以一次packages.config将多个 Visual Studio 解决方案从PackageReference格式迁移到格式?
我需要将 NuGet dll 的 Copy Local 设置为 false。在此之前,我使用了package.config格式,一切正常。迁移到包参考格式后,我找不到如何做到这一点的方法。有人可以帮助我吗?
我们正在将项目从packages.config升级到PackageReference结构。引用的包之一在子文件夹中包含 DLL,例如:
当使用packages.config从项目中引用此包时,该包的所有DLL都作为引用包含在项目中,并且工作正常。使用 PackageReference 时,它似乎只能识别根文件夹 (lib\net45) 中的 DLL。对于使用子文件夹中 DLL 的功能的所有内容,我们都会遇到构建错误。有没有办法告诉 NuGet 在使用 PackageReference 时考虑 NuGet 包的子文件夹?
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之间的文件夹结构不同。
其他人遇到过这个问题吗?任何帮助都需要提前感谢
packagereference ×10
nuget ×9
.net ×4
msbuild ×3
c# ×2
.net-4.7.2 ×1
.net-core ×1
azure-devops ×1
clickonce ×1
ilmerge ×1
migration ×1