如何在项目中使用不同的文件以用于不同的构建配置 – Visual Studio C#.net

我有#.net winforms解决方案,我想创建两个不同的版本:一个支持IE6,另一个支持IE7。 我的一个项目中的一些文件对于IE6构建与IE7构建是不同的,所以当我为IE7构建IE6时构建IE6和IE7文件时,我想要包含IE6文件。 在这种情况下构建解决方案的最佳方法是什么?

由于其他约束,我不想创建包含共享项的单独程序集; 我希望项目编译为单个程序集’foo.dll’,无论我正在构建哪个构建。

我以为我可以创建两个单独的项目,编译为’foo.dll’,然后创建两个发布配置,并仅在相关配置中包含相关项目。 但是我需要在两个项目中包含IE6和IE7相同的文件,我无法看到如何在两个项目中使用文件的单个副本(当我添加现有项目时,它会创建一个副本项目目录)。 我正在使用SVN进行源代码控制,所以也许可以使用它来在文件夹之间进行“共享”,但怀疑这是最好的方式..

注意:由于IE中的API差异,需要不同的构建,其细节与问题无关 – 只要相信我需要两个构建。

在MSBuild中,您可以为项目组指定条件。 然后,您可以将这些条件绑定到目标设备。

例:

  true   false                      

请注意,所有文件都将出现在IDE中,但在编译时,所有文件都应正确对齐。

然后,您需要做的就是在配置管理中创建您的平台(IE6和IE7)。

您也可以直接使用platform属性而不是创建中间属性。

为了在两个或更多项目中添加相同的文件,您可以

右键单击该项目,然后选择Add >> Existing Item
在文件选择器中选择文件
单击文件选择器中“添加”按钮右侧的小三角形
选择添加为链接

这将把文件添加到项目中而不复制它。

我不知道你的情况的所有细节,但你的解决方案听起来很尴尬。 同一个dll的两个版本可能会在客户端计算机上最终导致配置问题。 我鼓励你考虑Kevin对具有所有function的单个dll的想法,并根据需要调用适当的代码。

假设您使用的是VS2005或更高版本,则可以使用项目文件中的Condition属性。

您需要直接编辑csproj文件

  1. 卸载项目
  2. 编辑

然后在你想要有条件地包含的文件上

    

我不确定如何做你要问的问题,但是你不能只在DLL中包含两个版本的API包装器并确定在运行时调用哪一个? 例如,如果用户安装了应用程序的IE6版本然后升级到IE7,该怎么办? 他们需要重新安装,对吧?

在我看来,这将是一个更简单的解决方案,但也许我错过了一些东西……