首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Visual Studio NuGet:为什么不执行依赖包的.targets文件?

Visual Studio NuGet是一个包管理工具,用于在项目中引用和管理第三方库和依赖包。在使用NuGet时,有时会遇到依赖包的.targets文件不被执行的情况。

.targets文件是一种MSBuild文件,用于定义构建过程中的任务和目标。它通常用于在项目构建过程中执行一些自定义操作,例如复制文件、生成代码等。然而,有时在使用NuGet引入依赖包时,其中的.targets文件可能不会被执行。

这种情况可能是由于以下原因导致的:

  1. NuGet包版本不兼容:某些情况下,NuGet包的版本可能与当前项目的MSBuild版本不兼容,导致.targets文件无法被执行。解决方法是尝试更新NuGet包的版本,或者查找与当前项目兼容的其他包。
  2. 目标框架不匹配:如果项目的目标框架与依赖包的.targets文件所定义的目标框架不匹配,那么.targets文件可能不会被执行。确保项目的目标框架与依赖包的.targets文件所定义的目标框架一致。
  3. 缺少必要的构建工具:某些依赖包可能需要特定的构建工具才能执行其.targets文件。在这种情况下,需要确保项目中已安装了所需的构建工具,并且配置正确。
  4. NuGet包配置问题:有时,NuGet包的配置可能会导致.targets文件不被执行。可以尝试检查项目中的NuGet包配置,确保没有禁用或忽略.targets文件的设置。

总结起来,当Visual Studio NuGet不执行依赖包的.targets文件时,可能是由于NuGet包版本不兼容、目标框架不匹配、缺少必要的构建工具或NuGet包配置问题所导致。解决方法包括更新NuGet包版本、确保目标框架匹配、安装必要的构建工具以及检查NuGet包配置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在项目文件 MSBuild NuGet 包中编写扩展编译的时候,正确使用 props 文件和 targets 文件

工具包 - walterlv 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 - walterlv 当我们创建的 NuGet 包中包含 .props 和 .targets 文件的时候,我们相当于在项目文件...')" /> 如果你安装的多份 NuGet 包都带有 .props 和 .targets 文件,那么就相当于帮助你 Import 了多个: 1 2 3 4 5 6 7 8 9...所有的 NuGet 包或者扩展的编译流程都将可以访问到你设置的属性的值 如果你是使用属性,或者按条件设置属性,那么请写到 .targets 里面 因为这个时候多数的属性已经初始化完毕,你可以使用到属性的值了...如果你写的是编译目标(Target),那么请写到 .targets 里面 编译目标是扩展编译的,通常都是使用属性 也会有一些产生属性的,但那都是需要在编译期间产生的属性,其他依赖需要使用 DependsOn...-- 当生成 WPF 临时项目时,不会自动 Import NuGet 中的 props 和 targets 文件,这使得在临时项目中你现在看到的整个文件都不会参与编译。

27820

帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包

但实际上这个属性在后面版本的 NuGet 开发中就丢掉了。不生效。 官方提供了 IsTool 属性可以使用,但这依然不能阻止 B 安装了 A 包之后,C 包被迫安装 A 包的问题。...▲ 项目的结构 以下是 A 项目的 csproj 文件,包含将 Package.targets 在打包 NuGet 包时改名的部分。...Studio 编译的时候,一切符合预期;就像下图这样,B 项目中没有声明对 A 的依赖: ?...nuget restore msbuild dotnet restore dotnet build 不过,令人难以置信的时,如果此时 Visual Studio 打开了此项目,命令行编译却能符合预期。...另外,我还尝试将 Package.targets 中的所有内容放到 里面以获得延迟到编译期执行的效果,但结论依然与上面一致,即仅能在 Visual Studio 中正常工作。

83920
  • 帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包

    如果你希望做一个 NuGet 工具包,那么这个包一定不能作为依赖传递给下一个包。典型的例子,做一个生成版本号的工具 NuGet 包,或者做一个代码分析器。...但实际上这个属性在后面版本的 NuGet 开发中就丢掉了。不生效。 官方提供了 IsTool 属性可以使用,但这依然不能阻止 B 安装了 A 包之后,C 包被迫安装 A 包的问题。...▲ 项目的结构 以下是 A 项目的 csproj 文件,包含将 Package.targets 在打包 NuGet 包时改名的部分。...nuget restore msbuild dotnet restore dotnet build 不过,令人难以置信的时,如果此时 Visual Studio 打开了此项目,命令行编译却能符合预期。...另外,我还尝试将 Package.targets 中的所有内容放到 里面以获得延迟到编译期执行的效果,但结论依然与上面一致,即仅能在 Visual Studio 中正常工作。

    99050

    MSBuildRoslyn 和 NuGet 的 100 个坑

    100 个坑 不可用的源 NuGet 可以指定多个包源。既可以在 Visual Studio 中配置,也可以在配置文件中配置。 ? ? 文件 Sdk 的来回切换 MSBuild 15.0 为项目文件的根节点 Project 带来了 Sdk 属性,也就是说 Visual Studio 2017 开始支持。...依赖的项目会自动转为依赖的 NuGet 包 如果你给一个项目 A 打 NuGet 包,但这个项目引用此解决方案中的另一个项目 B。那么这时打包,NuGet 会认为 A 包依赖于 B 包。...文件;其中 .nuget.g.props 和 .nuget.g.targets 中生成了 Import 包中编译相关文件的代码。...和 obj\Walterlv.Demo.csproj.nuget.g.targets 文件是因为这两个文件不在版本管理中;而且如果执行 nuget restore 或者 dotnet restore

    1.4K20

    MSBuildRoslyn 和 NuGet 的 100 个坑

    100 个坑 不可用的源 NuGet 可以指定多个包源。既可以在 Visual Studio 中配置,也可以在配置文件中配置。 文件 Sdk 的来回切换 MSBuild 15.0 为项目文件的根节点 Project 带来了 Sdk 属性,也就是说 Visual Studio 2017 开始支持。...但是,只有使用了 Sdk 风格的 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。...依赖的项目会自动转为依赖的 NuGet 包 如果你给一个项目 A 打 NuGet 包,但这个项目引用此解决方案中的另一个项目 B。那么这时打包,NuGet 会认为 A 包依赖于 B 包。...和 obj\Walterlv.Demo.csproj.nuget.g.targets 文件是因为这两个文件不在版本管理中;而且如果执行 nuget restore 或者 dotnet restore

    41130

    理解 C# 项目 csproj 文件格式的本质和编译流程

    常规的 C# 编译 None 没啥特别的编译选项,就为了执行一些通用的操作(或者是只是为了在 Visual Studio 列表中能够有一个显示) Folder 一个空的文件夹,也没啥用(不过标了这个文件夹...dll 文件从 MSTest 的 NuGet 包中以链接的形式包含到项目中,并且此文件在 Visual Studio 的解决方案列表中不可见。...NuGet 工具包 - 吕毅 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - 吕毅 每次都要重新编译?...当 Visual Studio 打开项目时,它会解析里面所有的 Import 节点,确认应该引入的 .props 和 .targets 文件都引入了。...新的 Microsoft.NET.Sdk 以不兼容的方式原生支持了 NuGet 包管理。也就是说我们可以在不修改 csproj 的情况之下通过 NuGet 包来扩展 csproj 的功能。

    2.6K10

    .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    对于.NET Core来说,所有使用到的程序集都被打包成一个NuGet包,所以针对程序集的直接依赖转变成针对某个NuGet包的依赖。...,平台的依赖,它也是Nuget包,其中包含了一堆系统库的NuGet程序包,包含.netcore的基础运行时和基础类库。...执行dotnet restore命令后项目会根据project.json文件配置来恢复项目依赖包,同时就会生成新的project.json.lock文件。...它的工作方式 和 npm以及 RubyGems非常相似,你可以把这个文件签入版本库,也可以不签入,但此文件不存在时,将运行 NuGet restore 还原以重新创建。...global.json global.json是一个有待探究的神奇配置文件,我最喜欢的一个功能是全新的支持调试和单步执行,甚至可以实时修改包的源代码。

    2K80

    Visual Studio 2017 以前的旧格式的 csproj Import 进来的 targets 文件有时不能正确计算属性(PropertyGroup)和集合(ItemGroup)

    我在之前的博客中有教大家如何编写 NuGet 工具包,其中就有编写 .targets 文件。...这是一个 .targets 文件,项目安装此 NuGet 包之后就会自动 Import 这个 targets 文件。...在新的有 Sdk 的 csproj 中,这个 targets 文件的执行没有问题。但是,对于旧的 csproj 来说,就经常出现这几个属性为空或者部分为空的情况。...原因 究其原因,这是 MSBuild 对项目文件(csproj)的解析和 Visual Studio 对项目文件的解析是不同的。...衍生知识 旧格式的 csproj 是不会自动计算属性和集合的变更的,这也是为什么项目文件改变的时候,Visual Studio 需要重新加载项目才可以正常显示和编译项目。

    21930

    csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?

    当我们在传统格式的 csproj 项目文件中安装 NuGet 包后,有时会在项目文件中发现空的 NuGetPackageImportStamp 节点。...我们发现,安装此 StyleCop.MSBuild NuGet 包的情况下,csproj 文件中新增了两个大的内容块: NuGetPackageImportStamp 用于 Import 一个 targets...这是为了让 Visual Studio 运行的时候,能够检测到 csproj 文件改变,以便重新加载这个项目,因为需要 Import 新的内容。...在以前的 Visual Studio 版本中,会随机写下一段字符串;在新的版本中,它是个空字符串。...由于新的 csproj 文件能够识别到外部 Import 文件的改变,所以其实并不需要这样的机制来让 Visual Studio 感知到文件的改变。

    28920

    Visual Studio 2017 配置项目生成文件的路径以及项目依赖

    Visual Studio 项目的配置,设置项目生成文件的路径 打开工程项目的属性,如下图,选择 General -> Output Directory ?...Target Name:生成的文件的名字 Target Extension:生成的文件的后缀名Q,不影响文件本身的类型 Platform Toolset:生成的文件是以哪个版本的Visual Studio...运行的,如果想在更低版本的Visual Studio上运行项目,需对此进行更改 Configuation Type:生成文件本身的类型,可以选择exe,dll或者lib等。...::vector &Bearing) Visual Studio 中设置项目依赖 在Visual Studio中的项目之间,如果存在相互依赖(一个项目的输出需要作为另一个项目的输入...在选择项目依赖的时候需要注意,两个项目不能相互依赖,不然会导致依赖死循环的产生,这会在编译的时候报错。在选择完项目依赖后,Visual Studio会根据依赖项自动选择编译顺序。

    2.3K20

    无需安装 VS2019,在 Visual Studio 2022 中编译 .NET Framework 4.543.5 这样的古老框架

    因此,我们将通过安装此 NuGet 包来解决 Visual Studio 2022 中目标包的缺失问题。 正常你只需要在项目中安装这个 NuGet 包即可。...,那么在引用此 NuGet 包之后,应该加上 PrivateAssets="all" 来标记此 NuGet 包不会成为你自己的库的其中一个依赖。...▲ 不期望的依赖 ▲ 正常的依赖 第二步:适配 Visual Studio 的特殊开发环境 如果你不用 VS2022,而只是使用 dotnet build 或 msbuild 命令来编译,那么以上第一步完成后就够了...,那么就在对应的 Directory.Build.targets 文件中添加这一段(没有此文件则新建)。...写完上面的代码之后: 关闭 Visual Studio 2022 清理仓库,执行 git clean -xdf 命令(这会删除所有未被版本管理的文件,包括 Visual Studio 的各种缓存文件)

    1.8K30

    如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    所以,我们需要进行“一番配置”,使得这个项目编译成一个NuGet 工具,而不是一个依赖包。...那么,如何改造我们的项目才能够生成这样的 NuGet 目录结构呢? 我们先在 Visual Studio 里建好文件夹: ?...DevelopmentDependency 是为了说明这是一个开发依赖,设置为 true 将阻止包作为依赖传递给下一个项目。(事实上这又是官方的一个骗局!因为新版本的 NuGet 竟然去掉了这个功能!...第三步:编写 Target .targets 文件是对项目功能进行扩展的关键文件,由于安装 NuGet 包会自动导入包中的此文件,所以它几乎相当于我们功能的入口。 现在,我们需要徒手编写这个文件了。...我们找一个其他的项目,然后在 Visual Studio 中设置 NuGet 源为我们那个 NuGet 工具项目的输出路径。 ?

    1K20

    自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference

    当然,工具并不将 csproj 格式进行迁移,而是在不迁移格式的情况下,使用到 PackageReference 方式 NuGet 引用带来的好处。...---- 自动升级 下载安装 Visual Studio 插件 NuGet PackageReference Upgrader。在安装完成之后,再次启动 Visual Studio,则可以开始迁移。...install.ps1 的存在是因为 packages.config 不支持 PackageReference 中的一些新特性(例如 NuGet 包中新的目录结构,例如包中自带的 msbuild targets...所以,如果 NuGet 包在发布时满足目录要求,那么即便 install.ps1 不用执行也能保证包的行为正常。...packages.config 方式的包引用要求在 csproj 文件中显式指定一个依赖的包的版本,于是无论依赖使用了哪个版本,最终都由显式指定的版本来指定。

    1.8K20

    WPF 程序的编译过程

    而判断是否在 Visual Studio 中编译的方法可以参见: MSBuild 在编写编译任务的时候判断当前是否在 Visual Studio 中编译 1 2 3 4 5 6 的编译过程(即便不是 WPF 程序也会执行的 Target) 浅黄色,表示在这张图里面不关心的 Target(不然整个画下来就太多了) 紫色,仅在 Visual Studio 编译期间会执行的...生成临时程序集和临时程序集的编译过程并不在同一个编译上下文中,这也是为什么只能通过传递名称 _CompileTargetNameForLocalType 来执行,而不能直接调用这个编译目标或者设置编译目标的依赖...注意,虽然新生成的项目文件中有 PackageReference 来表示包引用,但由于只有 _CompileTargetNameForLocalType 指定的编译目标和相关依赖可以被执行,而 NuGet...包中自动 Import 的部分没有加入到依赖项中,所以实际上包中的 .props 和 .targets 文件都不会被 Import 进来,这可能造成部分 NuGet 包在 WPF 项目中不能正常工作。

    47230

    将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj

    从对比中我们就能明显看出新 csproj 文件的优势: 文件小,易读易写 在版本管理中更容易解冲突 NuGet 包的引用没有路径要求,这意味着开发者可以任意指定 NuGet 包的位置 嵌套的引用不需要重复指定...你 必须将 Visual Studio 升级到 15.8 以上的版本,否则WPF 或者 UWP 项目迁移成新项目之后,默认新建的 XAML 文件会不可见,每次都需要手工去 csproj 中删掉自动增加的错误的...就是试图迁移的那个项目!无论依赖了谁还是被谁依赖,都是此项目发生“NuGet”错误。...其实这是只有新的项目文件才会出现的编译错误,而错误原因是 NuGet 的缓存文件中与包引用相关的信息已经不正确了,需要运行 nuget restore 或者 dotnet restore 重新更新此文件才行...但是,只有使用了 Microsoft.NET.Sdk 的新 csproj 文件才会在执行了此命令后重新生成正确的包引用缓存文件;原来的格式并不会生成此文件,也就是说,无法修复。

    1.5K20

    制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)

    那个临时的项目文件是如何生成的; 那个临时项目文件和原始的项目文件有哪些不同; 编译临时项目文件时,哪些编译目标会执行,哪些编译目标不会执行。...注意,虽然新生成的项目文件中有 PackageReference 来表示包引用,但由于只有 _CompileTargetNameForLocalType 指定的编译目标和相关依赖可以被执行,而 NuGet...包中自动 Import 的部分没有加入到依赖项中,所以实际上包中的 .props 和 .targets 文件都不会被 Import 进来,这可能造成部分 NuGet 包在 WPF 项目中不能正常工作。...; 临时项目文件的编译中,会执行 _CompileTargetNameForLocalType 内部属性指定的编译目标,虽然相当于开放了修改,但由于临时项目文件中不会执行 NuGet 相关的编译目标,所以不会自动...(MSBuildProjectName).csproj.nuget.g.targets" /> 另外,可以直接在这里 Import 我们 NuGet 包中的编译文件,但这些不如以上方案来得靠谱

    49140

    【译】.NET 升级助手现在支持升级到集中式包管理

    此页面还提供 Nuget Central 包管理设置。建议使用传递固定,默认情况下启用。我们还提供了建议的文件路径,所有集中包版本都将存储在该路径中。如果建议的位置不正确,您可以自行选择其他位置。...了解文件更改 当您在 Visual Studio 中单击“升级”或按 Enter 键运行 .NET CLI 工具时,带有包引用的项目将被修改,并且您的解决方案或选定的项目现在将使用 NuGet Central...包发现 作为升级助手最新改进的一部分,我们改变了在各种升级中发现和修改项目依赖项的方式。以前,升级会直接在项目文件中修改 NuGet 包引用、程序集引用和项目引用。...现在,这些内容是在定义它们的位置进行编辑,而不是直接编辑项目文件,即如果在显式导入的目标文件或隐式导入(如 Directory.Build.props、Directory.Build.targets 或...由于 Visual Studio 的变化,我们建议更新低于 17.3 的版本以保持安全。因此,升级助手不再支持低于 17.3 的 Visual Studio 版本。

    9710
    领券