【问题标题】:Nuget: How to use files in the tools folder in the target application?Nuget:如何在目标应用程序的工具文件夹中使用文件?
【发布时间】:2017-04-27 16:00:08
【问题描述】:

我在我的nuspec的tools文件夹中添加了一个构建EXE工具,它被正确添加到\packages\xxx\tools文件夹下的目标应用程序中。

但我需要在目标项目中将此文件作为构建操作调用。引用它的正确方法是什么?请记住,对于每个新版本的包,\packages\ 中的文件夹名称都会更改。所以我不能硬编码。

【问题讨论】:

  • 你找到答案了吗?
  • “我需要将此文件作为构建操作调用”:您的意思是构建前/构建后步骤吗?如果需要对文件设置 Build Action,可以手动指定。查看documentation 并搜索“buildAction”。
  • @techvice,我确实有构建后步骤,但问题是通过 Nuget 分派更新的 EXE 文件,就像交付任何其他包更新一样。
  • @Devedse,我发布了我的解决方案作为答案。

标签: asp.net nuget nuget-package-restore nuget-spec nuspec


【解决方案1】:

就我而言,我遇到了这种情况:

  • 目标项目是一个 .NET Core 应用。
  • EXE 文件不是 .NET Core,必须保留为 EXE

我发明了一种解决方法:

  1. 创建了一个控制台应用程序 DLL 项目(.NET 核心)并将 EXE 文件作为嵌入式资源添加到其中。
  2. 为新的 DLL 文件创建了一个普通的 NuGet 包。
  3. 在目标应用程序中,我引用了这个包 (dll),因此所有未来的版本都会以正常的 NuGet 方式更新。
  4. 在目标应用程序中,我添加了一个构建后事件来运行 dll 文件:

    dotnet TheDllName.dll

    以正常方式打包DLL文件并在目标应用程序中引用。在其中以正常方式发送。每次更新 NuGet 包时,新的 EXE 也会分布在 DLL 中。然后我用了一个命令

DLL 运行时会发生什么?

  1. 从自身读取 EXE 文件,就像任何其他嵌入式资源一样。
  2. 将其作为 EXE 文件保存在磁盘上。
  3. 启动一个新进程来运行 EXE 文件。

优化

这不是绝对必要的,但是为了优化上面的过程,我还添加了一个版本文件(简单的txt文件名为ver.txt)来记录EXE文件的版本号,所以我每次只提取保存一次更新了 NuGet 包。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 2018-03-14
    • 1970-01-01
    • 2018-12-21
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    相关资源
    最近更新 更多