C#基于构建的引用

C#基于构建的引用,c#,visual-studio-2013,C#,Visual Studio 2013,情景 C#VS2013 我有一个包含两个项目a和B的解决方案,其中项目a引用了项目B中的类 项目B包含相对静态的类,这些类是特定于环境的,以允许在本例中的特定环境中进行接口 我想用基于开发环境的类创建项目B的克隆,并在使用开发人员配置构建时使用它而不是生产版本 我不想以任何方式将项目更改为代码库 如何实现这一点?这相对容易实现。它需要手动编辑一些项目文件。首先创建项目B的克隆,然后在编辑器中打开新的csproj文件,并将项目GUID更改为新的(不要将其与项目类型GUID混淆),为避免将来出现错误

情景 C#VS2013 我有一个包含两个项目a和B的解决方案,其中项目a引用了项目B中的类

项目B包含相对静态的类,这些类是特定于环境的,以允许在本例中的特定环境中进行接口

我想用基于开发环境的类创建项目B的克隆,并在使用开发人员配置构建时使用它而不是生产版本

我不想以任何方式将项目更改为代码库


如何实现这一点?

这相对容易实现。它需要手动编辑一些项目文件。首先创建项目B的克隆,然后在编辑器中打开新的csproj文件,并将项目GUID更改为新的(不要将其与项目类型GUID混淆),为避免将来出现错误,还应更改新的项目文件名

在项目A中,唯一需要更改的是与项目B csproj引用相关的更改,我们希望根据某些环境/构建设置将其设置为有条件的,并根据这些设置选择产品或开发人员项目B引用

下面我创建了一个CppSharp项目的项目参考部分的副本。当DevelopmentBuild environment或MSBuild属性为false时,对CppSharp项目的项目引用被拆分为两个可选包含的对CppSharp.csproj的引用,当DevelopmentBuild设置为True时包含对CppSharp.Dev.csproj的引用

  <ItemGroup>
    <ProjectReference Include="..\Core\CppSharp.csproj" Condition"$(DevelopmentBuild) != 'True'">
      <Project>{C600C309-B2CD-1D15-DBE6-0BBDC71253A3}</Project>
      <Name>CppSharp</Name>
    </ProjectReference>
    <ProjectReference Include="..\CoreDev\CppSharp.Dev.csproj" Condition"$(DevelopmentBuild) == 'True'">
      <Project>{C600C309-B2CD-1D15-DBE6-0BBDC71253A4}</Project>
      <Name>CppSharp</Name>
    </ProjectReference>
    <ProjectReference Include="..\AST\CppSharp.AST.csproj">
      <Project>{BC4C5C41-A8AF-EBE5-5135-249C3D77B768}</Project>
      <Name>CppSharp.AST</Name>
    </ProjectReference>
    <ProjectReference Include="..\Runtime\CppSharp.Runtime.csproj">
      <Project>{189FF169-0498-10BC-2DCA-F5401922F0C7}</Project>
      <Name>CppSharp.Runtime</Name>
    </ProjectReference>
    <ProjectReference Include="..\..\build\vs2015\projects\CppSharp.Parser.CLI.vcxproj">
      <Project>{C75EB680-33C0-938E-BC2D-DA40288ECA4D}</Project>
      <Name>CppSharp.Parser.CLI</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

{C600C309-B2CD-1D15-DBE6-0BBDC71253A3}
CppSharp
{C600C309-B2CD-1D15-DBE6-0BBDC71253A4}
CppSharp
{BC4C5C41-A8AF-EBE5-5135-249C3D77B768}
CppSharp.AST
{189FF169-0498-10BC-2DCA-F5401922F0C7}
CppSharp.Runtime
{C75EB680-33C0-938E-BC2D-DA40288ECA4D}
CppSharp.Parser.CLI

这相对容易实现。它需要手动编辑一些项目文件。首先创建项目B的克隆,然后在编辑器中打开新的csproj文件,并将项目GUID更改为新的(不要将其与项目类型GUID混淆),为避免将来出现错误,还应更改新的项目文件名

在项目A中,唯一需要更改的是与项目B csproj引用相关的更改,我们希望根据某些环境/构建设置将其设置为有条件的,并根据这些设置选择产品或开发人员项目B引用

下面我创建了一个CppSharp项目的项目参考部分的副本。当DevelopmentBuild environment或MSBuild属性为false时,对CppSharp项目的项目引用被拆分为两个可选包含的对CppSharp.csproj的引用,当DevelopmentBuild设置为True时包含对CppSharp.Dev.csproj的引用

  <ItemGroup>
    <ProjectReference Include="..\Core\CppSharp.csproj" Condition"$(DevelopmentBuild) != 'True'">
      <Project>{C600C309-B2CD-1D15-DBE6-0BBDC71253A3}</Project>
      <Name>CppSharp</Name>
    </ProjectReference>
    <ProjectReference Include="..\CoreDev\CppSharp.Dev.csproj" Condition"$(DevelopmentBuild) == 'True'">
      <Project>{C600C309-B2CD-1D15-DBE6-0BBDC71253A4}</Project>
      <Name>CppSharp</Name>
    </ProjectReference>
    <ProjectReference Include="..\AST\CppSharp.AST.csproj">
      <Project>{BC4C5C41-A8AF-EBE5-5135-249C3D77B768}</Project>
      <Name>CppSharp.AST</Name>
    </ProjectReference>
    <ProjectReference Include="..\Runtime\CppSharp.Runtime.csproj">
      <Project>{189FF169-0498-10BC-2DCA-F5401922F0C7}</Project>
      <Name>CppSharp.Runtime</Name>
    </ProjectReference>
    <ProjectReference Include="..\..\build\vs2015\projects\CppSharp.Parser.CLI.vcxproj">
      <Project>{C75EB680-33C0-938E-BC2D-DA40288ECA4D}</Project>
      <Name>CppSharp.Parser.CLI</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

{C600C309-B2CD-1D15-DBE6-0BBDC71253A3}
CppSharp
{C600C309-B2CD-1D15-DBE6-0BBDC71253A4}
CppSharp
{BC4C5C41-A8AF-EBE5-5135-249C3D77B768}
CppSharp.AST
{189FF169-0498-10BC-2DCA-F5401922F0C7}
CppSharp.Runtime
{C75EB680-33C0-938E-BC2D-DA40288ECA4D}
CppSharp.Parser.CLI

如果需要,请使用。请参阅msdn:可能与多个实现重复,或者哪一个更内联。。。我强烈建议不要创建“项目B的克隆”——复制代码通常会导致维护问题。最有可能的选择是选择有或没有IoC的配置框架。@Samir Aguiar解决方案可能有一些相似之处,但问题不是重复的。我正在尝试交换一个可能存在命名冲突的相同dll。你链接到的问题过于简单,而且如果它是重复的,那么搜索就会找到它。使用#if。请参阅msdn:可能与多个实现重复,或者哪一个更内联。。。我强烈建议不要创建“项目B的克隆”——复制代码通常会导致维护问题。最有可能的选择是选择有或没有IoC的配置框架。@Samir Aguiar解决方案可能有一些相似之处,但问题不是重复的。我正在尝试交换一个可能存在命名冲突的相同dll。你链接到的问题太简单了,而且如果它是重复的,那么搜索就会找到它。谢谢,我会好好对待它的!谢谢谢谢,我会好好招待你的!谢谢