从两个被排除的库中引用的VS项目
本文关键字:引用 项目 VS 排除 两个 | 更新日期: 2023-09-27 18:01:29
应用程序有两个版本。第一个使用LIB_A库的引用,第二个使用LIB_B库的引用。(LIB_A和LIB_B实际上是同一产品的两个版本,但它们彼此不同,甚至命名空间也不同。不能在同一台机器上同时安装两个版本)。我的应用程序的源代码在两个版本几乎是相同的,所以我需要有一个解决方案,可以切换哪个库使用。我该怎么做呢?
既然你在评论中指定了VS2010,我单独添加了这个答案,以便VS2015的用户可以参考另一个答案,这更干净。
在VS2010中,您可以在两个项目之间使用源代码共享。假设您已经创建了AppA,它是引用LibA的应用程序项目,并包含应用程序的所有源代码。
你可以创建一个应用项目AppB,它引用LibB。它还共享所有AppA来源。这可以通过以下两种方式之一来完成:
手动链接所有源
在AppB中,您可以创建与AppA相同的文件夹结构(如果有的话)。右键单击每个子文件夹,然后单击"添加->现有项目…"导航到AppA对应的文件夹,选择所有c#文件。现在点击添加按钮右侧的下拉菜单,选择"添加为链接"。您会注意到,添加的源在其图标中有一个小的"共享"箭头,并且它们的路径指向原始源。
动态链接所有源
如果您在AppA中有很多文件,或者定期添加/删除文件,那么前面的方法可能会很累人。还有另一种方法需要手工编辑AppB.csproj。AppB开放。并创建一个从AppA导入所有文件的ItemGroup
。这段代码假设AppA和AppB是解决方案文件夹的子文件夹。如果没有,请修改相应的相对路径。
<ItemGroup>
<Compile Include="..'AppA''**'*.cs">
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
</Compile>
</ItemGroup>
现在当您打开解决方案时,您将看到AppB的内容与AppA的内容匹配。源代码是链接的,所以AppB的条件构建设置(如果有的话)将被应用。
您还可以通过向Compile
标记添加Exclude
属性来排除文件。查看VS文档了解更多细节。
这种方法的唯一缺点是需要手工编辑csproj文件。此外,如果您不小心删除或移动链接文件,VS将硬编码链接文件列表到项目中。文件本身仍将被链接。
刚好Visual Studio 2015(你可以下载Release Candidate,我发现它比VS2013更强大更快)有一个专门为这个目的设计的功能——共享项目。这是第9频道的一个视频。
共享项目包含直接编译成引用它的项目的源文件。假设一个共享项目shared有一个文件foo.cs,项目AppA和AppB都引用了项目shared,那么文件foo.cs被直接编译为AppA和AppB——它使用这些项目的任何条件设置。foo。cs的代码可以像这样
#if APPA
// do something
#elif APPB
// do something else
#endif
总结一下:
- 在一个单一的解决方案中,创建一个共享项目与所有的应用程序源。
- 创建两个项目apppa和AppB,代表你的应用程序的两种风格。
- AppA引用了Shared和Lib_A。AppB引用Shared和Lib_B。
- 如果需要,如上面所述添加控制源代码差异的编译变量。