NuGet 在构建开始之前恢复 PostSharp 包

2023-12-23

我正在使用 PostSharp,并且我的项目文件中有以下目标描述:

<Target Name="EnsurePostSharpImported" BeforeTargets="BeforeBuild" Condition="'$(PostSharp30Imported)' == ''">
  <Error Condition="!Exists('..\..\packages\PostSharp.3.1.33\tools\PostSharp.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://www.postsharp.net/links/nuget-restore." />
  <Error Condition="Exists('..\..\packages\PostSharp.3.1.33\tools\PostSharp.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://www.postsharp.net/links/nuget-restore." />
</Target>

据我了解,这是通过 NuGet 引用 PostSharp 时添加到项目中的,错误情况检查如下:

  • The 第一个错误条件当 PostSharp 不可用时(即 NuGet 未成功恢复),会破坏构建。
  • The 第二个错误条件当 NuGet 在上次构建中成功恢复 PostSharp 但因此未包含在项目中时,会破坏构建,因此需要重新构建。

BUT,如果我有以下配置NuGet.Config and .csproj file,第二个错误条件是否必要?

NuGet.Config file:

<configuration>
  <packageRestore>
    <!-- Allow NuGet to download missing packages -->
    <add key="enabled" value="True" />
    <!-- Automatically check for missing packages during build in Visual Studio -->
    <add key="automatic" value="True" />
  </packageRestore>
  ...
</configuration>

.csproj file:

<RestorePackages>true</RestorePackages>

据我了解,NuGet 将在构建开始之前恢复丢失的包。第二个错误条件基本上会无缘无故地破坏构建。

注意:我使用的是 Visual Studio 2013 和 NuGet 2.8。


这取决于恢复的完成方式以及您安装的 NuGet 版本。看起来错误消息试图涵盖三种情况:

  1. 在不启用基于 MSBuild 的包还原的情况下进行构建(通过右键单击解决方案并选择“启用包还原”在 Visual Studio 中进行配置)。
  2. 当未启用基于 MSBuild 的包还原时,在 Visual Studio 外部进行构建。
  3. 使用旧版本的 NuGet 通过 Visual Studio 进行构建,该旧版本不支持构建前的自动还原。

如果您使用基于 MSBuild 的包还原,则还原将在构建期间发生,此时不会导入 PostSharp 文件,因此 $(PostSharp30Imported) 将为空,并且将显示第二条错误消息。至少我怀疑情况确实如此。

如果从命令行构建并且不使用基于 MSBuild 的包还原,那么如果 NuGet 包丢失,您将看到第一条错误消息。

如果您没有使用基于 MSBuild 的包还原,而是使用最新版本的 NuGet 从 Visual Studio 中进行构建,那么您认为包将在构建任何内容之前进行还原是正确的。因此,PostSharp 导入在执行之前就应该可供 MSBuild 使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NuGet 在构建开始之前恢复 PostSharp 包 的相关文章

随机推荐

  • 如何在 Java 中加密/解密文件中的文本

    我的代码有问题 当我加密数据时 例如 在本例中 我使用接收者的公钥加密的模拟密钥 然后保存到文本文件中 当我读取该文本文件并尝试解密它时 使用接收者的私钥 我得到了不同的密钥 因此我无法使用它来解密加密的消息 发件人代码 import ja
  • 朱莉娅交换有什么问题!宏?

    我正在尝试写一个简单的swap Julia 中的宏 了解宏系统 到目前为止 这是我的代码 macro swap x y quote local tmp esc y x esc y y tmp end end a 1 b 2 swap a b
  • 如何从不同的JAR中读取多个同名的资源文件?

    如果类路径中有两个 JAR 文件 它们的根目录中都包含名为 config properties 的资源 有没有办法找回both文件类似于getClass getResourceAsStream 该顺序不相关 另一种方法是加载类路径中符合特定
  • 在 JavaScript 中声明多个变量

    在 JavaScript 中 可以像这样声明多个变量 var variable1 Hello World var variable2 Testing var variable3 42 或者像这样 var variable1 Hello Wo
  • 使用长时间运行的后台消费者任务时 Task.Factory.StartNew 中的静默异常?

    这通知未处理的异常 new Thread gt throw new Exception Start 这不会 至少在您等待 检索结果之前 Task Factory StartNew gt throw new Exception 为什么 抛出异
  • 测试 Django 电子邮件后端

    在我的 settings py 中 我输入 EMAIL BACKEND mailer backend DbBackend 所以即使从from django core mail import send mail the send mail函数
  • Coq 平等实现

    我正在编写一种玩具语言 其中 AST 中的节点可以有任意数量的子节点 Num has 0 Arrow有 2 个 等等 您可以致电这些接线员 此外 AST 中可能只有一个节点被 聚焦 我们对数据类型进行索引Z如果它有焦点 或者H如果没有 我需
  • 在 gpshell 中更改 Global Platform 默认密钥后,java 卡管理器身份验证失败

    我想更改用于加载小程序和向卡管理器发送安全消息的全局平台默认密钥 我可以使用以下命令成功更改我的金雅拓默认 GP 卡密钥 mode 211 enable trace establish context card connect reader
  • 这个 GNU 对三元运算符的扩展有多广泛?

    这是根据以下规则对三元运算进行的 GNU 扩展 维基百科 https en wikipedia org wiki 3F C iMyVal iVal iDft 虽然我完全知道这是一个 GNU 扩展 但有时使用这种特殊语法可能会非常方便 那么
  • 通用工厂方法的类型提示

    我很好奇是否可以通过 Python 中的类型参数推断泛型类型 用于类型提示 例如 考虑一个 相当愚蠢的 工厂方法 from typing import TypeVar Type T TypeVar T class Test1 object
  • Amazon SES 电子邮件地址未经验证

    我从亚马逊服务器开始 开始研究SES 我正在使用 asp net C 并制作了基于代码的教程 我已经检查了域 还检查了将在其中运行测试的电子邮件 因此 当我运行代码时 它会生成以下错误消息 事务失败 服务器响应为 消息被拒绝 电子邮件地址未
  • C++ 函数返回引用

    为什么我不能 不应该将对局部变量的引用返回给函数 是不是因为函数执行完毕临时变量就自动销毁了 const string wrap string s1 const string s2 string temp temp s2 s1 s2 ret
  • Typescript 函数返回类型基于可选参数的存在,而不使用函数重载

    打字稿游乐场 https www typescriptlang org play code C4TwDgpgBAKgmgBQKIH0CMUC8UBE9no4BQoksiqATFrvlcSeNAMIDyAcgCICSM3HNHGy69 7Bg
  • 无法设置浮动操作按钮的渐变背景

    我试图将浮动操作按钮的背景设置为渐变 我已经看到了很多解决方案 但没有一个适合我 无论我尝试什么 它都会向我显示一个黑色的操作按钮 我尝试过将背景设置为彩色 但这也不起作用 我正在尝试创建底部导航栏 My code
  • 如何在 Mono for Android (monodroid) 和 MonoTouch 中使用本机 C++ 库

    我有兴趣使用 Mono for Android 和 MonoTouch 来构建可以利用我拥有的大量 C 本机库的移动应用程序 我可以获得一些有关如何调用方法或将代码合并到 iOS 或 Android 上的最终移动应用程序中的具体说明吗 我在
  • 如何在 C# 中打印用户的输入? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 嘿 我刚刚开始 C 课程 所以我对编程还很陌生 我在打印用户的输入时遇到问题 当我要求用户输入本周跑的英里数时 它会显示输入 然后
  • THREE.js - 旋转移动 3D 球

    我是 THREE js 的新手 对物理学的了解非常少 但我正在尝试构建一个足球游戏引擎 从顶部看 而现在我正在努力处理球的运动 当尝试将球从一侧移动到另一侧时 旋转始终面向一个方向 我不明白如何使其沿其移动方向旋转 我添加了一个简单的代码来
  • CKEditor 中不可删除的元素

    我想知道是否有办法使 CKEditor 4 中的元素 不可删除 我可能有一些像这样的 HTML div class content div class gallery div div 在这种情况下 gallery应该无法删除 content
  • 更新 iPhone 上表格单元格中的值

    如果我在 iPhone 应用程序中设置了一个包含多行的 tableView 我如何才能只更新其中一行 我知道它们在进入视图时会手动刷新 但为了争论计时器倒计时 我希望推出更新 Thanks 感谢您的回答 我找到了另一种方法 通过这样调用 N
  • NuGet 在构建开始之前恢复 PostSharp 包

    我正在使用 PostSharp 并且我的项目文件中有以下目标描述