Visual Studio:如何正确处理项目依赖关系?

2024-02-28

我正在编写一个程序(用 C++ 编写),它需要多个 VS 项目,我想将其放入同一个 VS 解决方案中。我正在使用 Visual Studio 2010。

这只是想要的架构:我正在为我的项目使用第 3 方库 (A),我拥有使用源代码编译的所有标头和 .lib 文件。

通过这个库,我正在编写自己的类和函数。这就是我的项目(B)。

然后我想为用户开发两个界面:命令行界面(C1)和GUI界面(C2),它们使用(B)中定义的类和函数。

A <-- B <-- C1
        <-- C2

我是 Visual Studio 的新手,我不知道如何正确处理这些依赖项。 我应该使用项目依赖项(在解决方案属性中)还是引用(在项目属性中)?事实上,我不确定依赖项和引用到底在做什么。

我应该将 B 编译到某个 .lib 库中,还是做其他事情?如果我这样做,则必须仅将 B.lib 链接到我的 C1 和 C2 项目,或者我还应该链接 A.lib (换句话说,A.lib 的内容是否以某种方式包含在 B.lib 中?)。 当然,我希望能够很好地处理依赖关系,以便始终使用每个项目的最新版本。

有没有好的方法呢? 提前致谢,祝周末愉快:)


是的。使用项目参考。

这是微软官方的回答 http://msdn.microsoft.com/en-us/library/ee817675.aspx。虽然该页面讨论的是 .NET,但本机项目也几乎相同。

TL;DR 版本:

项目参考的优点:

  1. 它们在加载解决方案和项目集的所有开发工作站上工作。这是因为项目文件中放置了一个项目全局唯一标识符 (GUID),它在当前解决方案的上下文中唯一标识引用的项目。
  2. 它们使 Visual Studio .NET 构建系统能够跟踪项目依赖性并确定正确的项目构建顺序。
  3. 它们避免了引用的程序集在特定计算机上丢失的可能性。
  4. 它们自动跟踪项目配置更改。例如,当您使用调试配置进行构建时,任何项目引用都引用由引用的项目生成的调试程序集,而它们引用发布配置中的发布程序集。这意味着您可以跨项目自动从调试版本切换到发布版本,而无需重置引用。
  5. 它们使 Visual Studio .NET 能够检测并防止循环依赖。

这是另一篇不错的文章VS 2010 中的项目设置更改 http://blogs.msdn.com/b/vcblog/archive/2010/02/16/project-settings-changes-with-vs2010.aspx它还指出引用优先于项目依赖项。事实上,文章还说VS2010解决方案转换器会自动检测Project依赖关系并将其更改为Project引用。

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

Visual Studio:如何正确处理项目依赖关系? 的相关文章

  • 更改 botframework Formflow 中的确认选项

    我在 botframework 中创建了一个表单流 我想更改确认选项 默认情况下需要 是 和 否 但我希望它继续进行 而不是 是 即使用户输入 确定 是 是 等 我如何添加确认选项 您需要将新条款添加到YesFormBuilder 配置的数
  • Attachconsole的问题

    我需要使 Windows GUI 应用程序可以在控制台中运行 因此当使用命令行调用应用程序时 我将控制台附加到进程 但是 应用程序退出后 除非按 ENTER 键 否则不会显示带有路径的控制台提示符 有什么办法可以不按回车键直接显示路径提示吗
  • QT 5.6 QWebEngine不保存cookie

    我正在创建名为 webengine 的简单 QT 应用程序 pWebView new QWebEngineView this pWebView gt load QUrl http technoz ru pWebView gt show On
  • 如何序列化其类相互引用的类层次结构,但避免 XmlInclude?

    我有一个类的层次结构 我想使用XmlSerializer类及其相关属性 有一个基本抽象类 然后是相当多的派生类 在下面的代码中 我已将派生类的数量减少到五个 但实际代码中还有更多 这些类形成一个层次结构 并且经常包含对层次结构中类的实例的引
  • EF Core:同时使用ID作为主键和外键

    我有两个实体 Prospect and Person 我想做的是使用Prospect ID作为主键Prospect表并作为外键PersonID 我的想法是对两个实体使用相同的 ID 而不需要PersonID on my Prospect实体
  • 线程忙等待

    基本上 我需要忙着等待一些 html 出现在网页上 我创建了以下代码来忙等我 public void ExecuteBusyWaitThreads foreach Canidate canidate in allCanidates Thre
  • 如何使用 C# 从数据库中检索多个图像

    我有一个包含9张图像的数据库 这些图像不断变化 所以我无法直接设置src在 HTML 中 img 标签来显示 9 个图像 我必须从数据库中选择它们并相应地绑定它们 我可以使用以下命令检索并打印 1 张图像Response BinaryWri
  • const QList 警告 = QList() << 0; gcc 4.7.2 的段错误

    因此 主题行中提到的代码会导致 Qt 4 8 3 和 gcc 4 7 2 出现分段错误 这是在 cpp 文件中的任何类 结构之外 并且与 gcc 4 4 一起使用 const QList
  • 未初始化的枚举变量值

    我使用 enum 声明新类型 DAY 然后从中声明两个变量 day1 和 day2 然后当我使用未初始化的值时 我应该看到 0 到 6 之间的值 因为 enumlist 中的值介于 0 到 6 之间 但我收到了这些值改为 858993460
  • .NET:十进制到舍入字符串

    如果我有一个decimal 如何获得带有两位小数的字符串版本 这不起作用 Math Round myDecimal 2 ToString 0 00 不要使用大括号 它们用于使用以下命令将格式化值嵌入到较长的字符串中string Format
  • INotifyPropertyChanged 与线程

    我有一个 BindingList
  • C++ 抛硬币程序错误

    我正在尝试计算抛硬币中连续的正面朝上的次数 不幸的是 我的连续头计数器没有正确增加 有任何想法吗 代码和示例输出如下 include
  • BigInteger 乘以 Double

    我的物理老师给全班布置了一项艰巨的任务 我正在尝试创建一个程序来为我计算一些事情 在某个时刻 我需要将分子数量乘以百分比 Ulong 不能容纳大到 6022 10 19 的数字 所以我必须使用 net 4 0 中的 BigInteger 但
  • 使用 ViewBag 时出现 RuntimeBinderException

    我们收到 Layout cshtml 中使用的 Viewbag 项目的 RuntimeBinderException 我们在内存分析器中观察到这些异常 它们不是致命的 一切正常 但很烦人 我们想清除它们 例如 以下代码会导致异常 Rende
  • 在一个整数中找到另一个整数的 MSB 位置左侧的 N 个连续零位

    问题是 给定一个整数val1然后 给定第二个整数 找到最高位组 最高有效位 的位置val2找到第一个整数生成的位置左侧的未设置位的连续区域 width指定minimum必须在连续中找到的未设置位的数量 即width里面没有 0 这是我的解决
  • 为什么我的 QGestureRecognizer 收不到触摸事件?

    上下文 我正在尝试创建一个类似推子的小部件 它可以在同一视图中具有多个实例 每个实例都可以由不同的手指同时控制 我想用Qt的手势识别系统 http qt project org doc qt 4 8 gestures overview ht
  • 如何在 asp.net 中用空字符串替换字符串中的任何“/ \\ [ ] : | < > + = ; , ? *”字符

    我想用 asp net c 中的空字符串替换字符串中出现的任何以下字符 我正在尝试将其替换为 mystring contains mystring Replace 目前我正在按照上面的方法进行 有没有更干净的方法来做到这一点 感谢致敬 有很
  • WCF maxBytesPerRead 限制为 4096

    我在流模式下使用基本的 WCF Web 服务从服务器下载文件 我已将服务器端的绑定指定为
  • EF,Code First - 如何在插入时设置自定义 Guid 标识值

    在处理在数据库中插入新实体时 我面临以下问题Guid作为主键 代码优先的 EF 5方法 我知道有很多类似的主题 因为我为此问题运行了几个小时 但我找不到与此问题相关的主题 举个例子 我的 POCO 类是 public class Entit
  • 来自 StreamReader 的原始文件字节,幻数检测

    我试图区分 文本文件 和 二进制 文件 因为我实际上想忽略具有 不可读 内容的文件 我有一个文件 我认为它是 GZIP 存档 我试图通过检测幻数 文件签名来忽略此类文件 如果我在 Notepad 中使用十六进制编辑器插件打开文件 我可以看到

随机推荐

  • 使用 Flash、PHP、Red5 从浏览器录制视频

    我希望构建一个应用程序 使用它可以录制视频 以及音频 和音频 最好仅录制 mp3 格式的音频 根据我所做的一些研究 我发现我需要一个 Flash 或 Flex 客户端应用程序 一个 RTMP 服务器 RED5 最好 因为它是免费的 这是我用
  • 加载时重置缩放级别

    我没有 iPhone 所以无法自己测试这一点 但根据客户的说法 如果他放大以更轻松地单击链接 那么当下一页加载时 页面会保持放大状态 而用户必须手动缩小再次 请注意 这不是响应式网站 它没有设置元宽度 设备宽度 有什么办法可以防止这种情况发
  • 何时调用obtainPermanentIDsForObjects:?

    我目前遇到一个问题 即在后台子线程 其父级是主 UI 线程上下文 上创建新对象并保存会导致我的NSFetchedResultsController显示两个新对象 一个带有临时对象objectID 以及一个具有永久objectID 这似乎是某
  • 在 Chrome 中将焦点设置在 iframe 上

    我有一个 iframe id chat with designMode on 在 Chrome 中 在 Enter 按键事件上我调用该函数send 它获取 iframe 内容并将其写入套接字 我的问题是 当清除 iframe 时 我失去了焦
  • 开发流程、部署、GitHub

    我正在努力为我们的团队制定一个开发流程 任何时候 我们都有 3 4 分散的开发人员在我们的代码库上工作 我们已经开始使用 GIT 我们的想法是 工作不仅仅是实时修复 然后他们分叉了 master 分支 每个人在服务器上都有自己的开发环境 并
  • 函数数组和分段错误 - 无效的内存引用

    我正在尝试设置我的功能f作为数组 但我收到以下错误 Program received signal SIGSEGV Segmentation fault invalid memory reference Backtrace for this
  • C# UDP广播和接收示例

    问题 我正在尝试将 udp 套接字绑定到特定地址 我会广播一条消息 同一个套接字需要能够接收消息 当前代码 static void Main UdpClient Configuration new UdpClient new IPEndPo
  • gnuplot - 彩色刻度线

    有什么办法可以拥有gnuplot为 x 和 或 y 轴上的刻度线着色 我正在使用背景png文件非常暗 我希望内部抽动在其上显示为白色 而不是默认的黑色 The tics似乎继承了它们的颜色border set style line 50 l
  • Typescript:推断嵌套 keyof 属性的类型

    我想定义一个数组类型 它必须包含给定类型的嵌套属性名称链 假设我有一个类型 type Foo outer inner any 现在我想定义一个包含 2 个元素的数组类型 type PropertyList
  • SQL 查询的 NULL NOT IN (Empty_Relation) 在不同引擎上显示不同的行为

    我尝试在 Postrgresql Spark 上测试 NULL NOT IN Empty Relation 的查询 得到了不同的结果 select count from select 1 where null not in a empty
  • React js 输入复选框组

    是否可以在反应中创建输入复选框组 如果我映射了 3 个复选框 但只能单击其中一个 我是否只给每个状态一个状态 当选择一个状态后 然后取消选中其他状态 我已经尝试过无线电输入 但我需要能够将它们全部取消选中 就像在无线电组中一样 一旦您选择了
  • python pywin32 拒绝 Excel 访问

    我的代码是 Opens template for creating final report excel win32 dynamic Dispatch Excel Application template os path abspath f
  • R:具有两个变量和 ties.method random 的排名函数

    R中有没有一种方法可以使用带有多个条件和ties method的rank函数 或类似的函数 通常 排名用于对向量中的值进行排名 如果存在联系 您可以使用其中一种联系方法 平均 随机 第一 但是当对矩阵中的一列进行排名时 我想使用多列and关
  • 在 SWI-Prolog 中打开并检查 Pem 文件

    如何打开 Pem 文件来检查 a 不早于 和 不晚于 日期是否正常 以及 b pem 文件中是否存在通往路由证书颁发机构的证书链 我努力了 use module library http http client url http fm4dd
  • 对 STRUCT 数据类型使用 Like 运算符

    我有一个包含结构数组的表 有没有办法使用 like 运算符过滤此列中的记录 hive gt desc location location list array
  • 如何更改 RichTextBox 段落间距?

    我在 WPF 中使用 RichTextBox 并尝试将默认段落间距设置为 0 这样就没有段落间距 虽然我可以在 XAML 中执行此操作 但如果可能的话 我希望以编程方式实现它 有任何想法吗 我做到了有风格 双关缩进
  • jQuery 验证插件:验证以逗号作为小数分隔符的小数

    HTML
  • 为什么评估集会耗尽 pytorch 拥抱中的内存?

    我使用的是相当大的 GPU 大约 80 GB 训练纪元运行良好 但由于某种原因在评估时 训练集和验证集或多或少具有相同的长度 我内存不足并收到此错误 File home transformers trainer pt utils py li
  • F# 具有 Enum 类型的类型约束

    我想编写一个 F 函数 它采用通用枚举值 并且将其基础整数值加倍 幸运的是 有一个内置函数叫做int将枚举转换为整数 所以这应该很容易 对吧 这是我的第一次尝试 let doubler value t when t enum
  • Visual Studio:如何正确处理项目依赖关系?

    我正在编写一个程序 用 C 编写 它需要多个 VS 项目 我想将其放入同一个 VS 解决方案中 我正在使用 Visual Studio 2010 这只是想要的架构 我正在为我的项目使用第 3 方库 A 我拥有使用源代码编译的所有标头和 li