2017-10-24 4 views
1

das Szenario C# VS2013 Ich habe eine Lösung mit 2-Projekten A und B mit einem Projekt verweist die Klassen im Projekt B.C# build basierend Referenzen

Projekt B relativ statische Klassen enthält, die spezifisch zu ermöglichen Umwelt sind Schnittstellen in einer bestimmten Umgebung in diesem Fall Produktion.

Ich möchte einen Klon von Projekt B mit mit Entwicklungsumgebung basierten Klassen erstellen und ihn anstelle der Produktionsversion verwenden, wenn er mit einer Entwicklerkonfiguration erstellt wird.

Ich möchte die Project A Codebase in keiner Weise ändern müssen.

Wie kann ich das erreichen?

+0

Verwenden Sie #IF. Siehe msdn: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-if – jdweng

+0

Mögliches Duplikat von [Visual Studio Project: Wie Sie eine Referenz nur für eine Konfiguration einfügen ?] (https://stackoverflow.com/questions/1493749/visual-studio-project-how-in-in-clude-a-reference-for-one-configuration-only) –

+0

Oder vielleicht https://stackoverflow.com/ Fragen/14335186/Ändern-Implementation-of-Interface-abhängig von der Umgebung, die mehr inline mit mehreren Implementierungen ist ... Ich rate dringend zu erstellen "Klon von Project B" - Kopieren von Code führt in der Regel zu Wartungsproblemen. Wahrscheinlich wäre es die beste Wahl, ein Konfigurations-Framework mit oder ohne IoC auszuwählen. –

Antwort

0

Das ist relativ einfach zu erreichen. Es erfordert die manuelle Bearbeitung einiger Ihrer Projektdateien. Erstellen Sie zunächst den Klon von Projekt B, öffnen Sie dann die neue csproj-Datei in einem Editor und ändern Sie die Projekt-GUID in eine neue (und verwechseln Sie sie nicht mit dem Projekttyp Guid). Um zukünftige Fehler zu vermeiden, ändern Sie auch den Namen des neuen Projekts. In Project A sind die einzigen Änderungen, die erforderlich sind, mit Project B csproj-Referenzen verbunden, wo wir sie von einigen Umgebungs/Build-Einstellungen abhängig machen wollen und abhängig von ihnen die Projekt- oder Entwickler-Referenz für Projekt B auswählen.

Im Folgenden habe ich eine Kopie der Projektverweise Abschnitt eines der CppSharp-Projekte erstellt. Der Projektverweis auf das CppSharp-Projekt wurde in zwei alternativ enthaltene Verweise auf CppSharp.csproj aufgeteilt, wenn die DevelopmentBuild-Umgebung oder die MSBuild-Eigenschaft false ist, und verweist auf CppSharp.Dev.csproj, der enthalten ist, wenn DevelopmentBuild auf True festgelegt ist.

<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" /> 
+0

Danke, ich gebe es eine Chance – m12lrpv

+0

Arbeitete eine Belohnung! Vielen Dank !! – m12lrpv