在源代码和预编译二进制文件之间切换

2024-05-08

我们的应用程序中有大量的库。库是用 C++ 或 C# 编写的。 (平台:.net Framework、Windows、64 位)将所有内容编译为源代码需要花费大量时间。我们正在考虑切换到预构建的二进制文件,但我们仍然希望保留返回源代码的可能性。作为版本控制系统,我们使用 git,构建可以由 azure devops 完成。可以根据需要设置任何自定义服务器。

有哪些现成的工具可用于包管理,以及在源代码和预构建的二进制文件之间轻松切换的可能性? (如果工具与两种编程语言不兼容 - 可以只为一种语言指定工具集。)如果这样的工具不存在,您会自己推荐什么 - 使用什么样的包装,在什么样的脚本上编写上面那一个?

是否可以识别 Api/abi 中断?


有哪些现成的包管理工具,以及 是否可以在源代码和预构建的二进制文件之间轻松切换?

在 Visual Studio 中,您可以添加对另一个项目的引用(源代码)或另一个库(dll), 但是你无法从不同的解决方案添加对项目的引用 https://stackoverflow.com/questions/11601950/adding-a-projectreference-to-a-project-that-is-not-in-the-same-solution.

如果您想在之间切换source and dll,那么您必须不断从解决方案中添加/删除项目...这不是一个好的软件架构...它表明这些组件是紧密耦合,并且您需要一个组件的源代码才能测试另一个组件。软件组件应该相互独立。


将所有内容编译为源代码需要花费大量时间。我们曾经 考虑切换到预构建的二进制文件,但我们仍然希望 留下返回源代码的可能性

听起来您有一个大型应用程序,并且您希望引用您自己的代码的一部分作为预编译组件,以减少构建时间。换句话说,你想要建立自己的内部图书馆。现在,外部库没有什么特别的了。您可以轻松地创建 nuget 包 https://learn.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-visual-studio-net-framework对于你自己的任何一个类库.

例如,您可以有 2 个解决方案:

Your Solution-1包含您的类库项目。您可以为此解决方案中的每个项目创建一个 nuget 包。 (请注意,nuget 包是.nu​​pkg 文件 https://www.wiliam.com.au/wiliam-blog/creating-a-nuget-package)

Your Solution-2有您剩余的项目,您可以在此处安装上述软件包。

如果您需要更改您的库,您可以在Solution-1并创建一个新版本...当然你需要更新包Solution-2.

注意:您不需要有 2 个单独的解决方案来创建 Nuget 包...您可以为任何类库构建 nuget 包

发布包

如果您希望每个人都可以访问您的包裹,那么您需要Publish https://learn.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-visual-studio-net-framework否则,您可以将包放在组织内可访问的共享驱动器上。

重大变化

假设您已经制作了自己的 nuget 包:我的内部库并且您想对其进行重大更改:

  1. Open 我的内部库源代码,进行更改,构建并创建一个新的 nuget 包,这将是:我的内部库 lib-ver-2

  2. 您的其他项目依赖于此包,安装我的内部库 lib-ver-2在此项目上(这是您的开发环境)

  3. 由于新的重大更改,您的开发环境将会崩溃...修复开发环境

  4. 将您的固定代码发布到测试/生产环境中...

这没有什么特别的......它就像更新任何其他 nuget 包一样

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

在源代码和预编译二进制文件之间切换 的相关文章

随机推荐

  • 如何在 C# 中读取 Visio 文档内容

    我的DLL库代码如下 using System using IVisio Microsoft Office Interop Visio namespace Emix public class Visio protected String p
  • AS更新到1.0后,项目中出现“method ID not in [0, 0xffff]: 65536”错误

    我将 Android Studio 更新到最新版本 并让它 修复项目 之类的 但现在我的项目无法编译 给了我 FAILED FAILURE Build failed with an exception What went wrong Exe
  • Firebase Storage put() 方法上传数字数组而不是字符串

    我想将字符串上传到 Firebase 存储文件 我尝试过 let myString storage ref path child file txt putString myString raw and with let myString s
  • Pygame 文本不渲染

    好的 我正在用 python 和 pygame 制作一个多项选择测验游戏 不过 我已经完成了开始屏幕并尝试制作问题屏幕 我根本不明白为什么文本不呈现 这是我的代码 enter pressed False random question ra
  • nginx 匹配位置中的特定单词

    我在匹配 nginx request body 变量中的特定单词时遇到问题 如果正文请求中有特殊单词 我想代理传递 所以我的方法是这样的 location php if request body proxy pass http test p
  • 客户端如何获取session id? (网络套接字)

    有什么办法可以做到这一点吗 客户端 function connectWebSocket var socket new SockJS socket stompClient Stomp over socket stompClient conne
  • 有没有办法让vscode行号字段宽度变小?

    包含代码行号 VSC 的垂直列太宽 有办法缩小范围吗 您无法更改此列的大小 实际上有三列 行号左侧是名为的列glyphMargin 设置调试断点的地方 红点 编辑设置时 当您指向该线上时 该列会显示一支笔 如下面的屏幕截图所示 行号本身 在
  • 在C中更改函数内的数组

    我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改 我假设传递的数组是一个指针 并且更改指针应该更改数组 对吧 有人可以解释这种情况下发生了什么吗 谢谢你的帮助 int main int i length 10 i
  • C# 中 WinForm TextBox 中数字的按键事件

    我想限制用户在文本框中仅输入数字 我在按键事件中添加此代码 private void txtPartID KeyPress object sender KeyPressEventArgs e if e KeyChar gt 0 e KeyC
  • gRPC + 图片上传

    我想创建一个简单的gRPC用户可以上传他 她的图片的端点 协议缓冲区声明如下 message UploadImageRequest AuthToken auth 1 An enum with either JPG or PNG FileTy
  • Hololens-无法连接到设备

    我意识到这个问题在其他地方被问过 但答案似乎直接针对 Hololens 和 PC 之间的配对过程 这是我的问题的一部分 我在 Unity 中制作了一个应用程序并导出到 Visual Studio 当我尝试在 Hololens 上运行它时 出
  • MSAL.Net 没有帐户或登录提示传递到 AcquireTokenSilent 调用

    我见过很多相同或类似的问题 并尝试了他们所有的答案 如果有的话 但这些都不适合我 我在用着这个例子 https github com Azure Samples ms identity javascript angular spa aspn
  • XHR 调用是宏任务还是微任务?

    Ajax 调用被安排为微任务还是宏任务 浏览器之间有什么区别吗 在 JavaScript Ninja 的秘密 第二版一书中 作者指出网络事件被安排为宏任务 因此 XHR 回调与宏任务一起排队
  • 生成所有可能的树

    给定以下数据类型定义 data FormTree Empty Node FormTree FormTree deriving Show 我想编写一个函数 它生成一个无限列表 其中包含按长度排序的所有可能的树 例如节点数量 下面的代码几乎满足
  • 如何在核心数据中应用group by子句

    我正在实现 tableview 我想在 tableview 部分显示类名 并且我正在尝试获取 使用核心数据实现的数据库中的类值 我想使用类名上的 group by 子句获取数据 这是我的代码 AppDelegate appDelegate
  • Android Studio同时为同一个项目构建两个应用程序

    我正在使用 Android Studio v0 5 9 制作一个应用程序 它有一个图书馆项目作为依赖 但是 每次我运行该项目时 都会将两个具有相同名称和图标的 APK 部署到我的设备上 第一个 apk app 包含我的主模块 而第二个是库项
  • 如何将多个请求传输到 Firebase 以同时从多个节点获取数据

    我需要从 Firebase 数据库中的 4 个节点检索数据 根据设计 在 firebase 中 这只能通过触发 4 个查询来完成 就我而言 这 4 个查询是独立的 因为我已经知道每个查询的路径 我可以同时触发它们 我从 Frank van
  • 有没有办法在 Spring Boot 应用程序配置中使用 Spring Cloud {cipher} ?

    我有一个使用 Spring Cloud Config 的 Spring Boot 应用程序 但我想在 Spring Boot 应用程序 bootstrap yml 文件中加密 Spring Cloud Config 密码 有没有办法做到这一
  • smoothScrollToPosition() 在 Android ICS 中只能滚动到一半?

    在 Gingerbread 中 我使用 smoothScrollToPosition 一次滚动数十个项目没有任何问题 在我的 Nexus S 升级到 Ice Cream Sandwich 后 我注意到无论我在 smoothScrollToP
  • 在源代码和预编译二进制文件之间切换

    我们的应用程序中有大量的库 库是用 C 或 C 编写的 平台 net Framework Windows 64 位 将所有内容编译为源代码需要花费大量时间 我们正在考虑切换到预构建的二进制文件 但我们仍然希望保留返回源代码的可能性 作为版本