2011-06-29 56 views
26

我们这里有多种的产品,一些共同库。这些库是独立解决方案的一部分(所以它们可以独立由TFS构建),但问题是在开发过程中,必须修改公共库,将其编译为二进制文件,将其复制到公共位置,编译产品解决方案。Visual Studio 2010的条件引用

为了避免这种情况其实我想知道如果它可能有有条件的引用,因此对于调试配置,我将引用他们作为项目引用,而在发布配置,他们将是二进制的引用。

+1

没有很好的方式,我知道;在过去,我已经使用了多种解决方案......一种“主”解决方案,如果您正在进行重大架构更改,则引用所有解决方案,然后在单个项目上进行单独项目解决方案。一般来说,一个PITA。 –

+0

您可以通过手动修改'.csproj'文件来做到这一点。 – SLaks

+0

您可以通过修改您的建筑过程来做到这一点。使用像MsBuild这样的工具。 –

回答

39

您应该能够通过直接编辑的项目文件与条件结构做到这一点(VS IDE不会为你做这个)。

例如,你可能会做这样的事情用 “选择” 元素:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" > 
    <PropertyGroup> 
     <!-- ... --> 
    </PropertyGroup> 
    <Choose> 

     <When Condition=" '$(Configuration)'=='Debug' "> 
      <ItemGroup> 
       <ProjectReference Include="..\stuff\MyStuff.csproj"> 
        <Project>{4c7bbe47-8d84-45d4-95f0-f640ba59563c}</Project> 
        <Name>MyStuff</Name> 
       </ProjectReference> 
      </ItemGroup> 
     </When> 

     <When Condition=" '$(Configuration)'=='Retail' "> 
      <ItemGroup> 
       <Reference Include="MyStuff.dll" /> 
      </ItemGroup> 
     </When> 

    </Choose> 
    <!-- Rest of Project --> 
</Project> 

MSDN有more information about using conditional constructs

+0

做这些项目还得到部分解决方案吗? –

+0

我相信是这样,但在“发布”的情况下,它应该还可以。他们应该显示为没有被发现,这并不重要,因为在发布版本中他们并没有被实际引用。 – Matt

4

你可能想看看的NuGet:

NuGet

的NuGet是.NET平台的意图自由的,开放源码的开发者集中的包管理系统简化流程在开发期间将第三方库合并到.NET应用程序中

(在这里你将成为第三方自己在这种情况下)

注:这不会给你的条件引用,但它会缓解更新常用的组件。

相关问题