Visual Studio: как работать с базовым кодом? - PullRequest
1 голос
/ 12 июля 2011

Для поддержки двух основных версий CRM SDK у меня должно быть 2 проекта с одинаковым кодом, но разными библиотеками.

Единственное, что они изменяют в версиях, это только импортированные библиотеки, и этоне только для WebProject по умолчанию, но и для всех проектов классов, которые я использую.

Как мне легко иметь один и тот же код и можно тестировать / создавать для разных версий?

Например:

В моем решении:

Class Library: `Authentication.7` 
Class Library: `Authentication.6` 
Class Library: `Shared.WebControls` 
Class Library: `Shared.Utilites` 
Web Project: `MyWebApp` 

Часть Authentication.6, которая действительно имеет другой код из библиотеки Authentication.7 какаутентификация между этими основными версиями сильно отличается, все другие проекты просто ссылаются на все необходимые DLL из CRM SDK.

Есть ли способ сборки / тестирования, который бы загружал правильные references, такЯ все еще могу использовать базовый код?

Что вы, ребята, делаете в таких ситуациях?Мне больно держать в двух базовых кодах: - /

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Пока базовый код находится в сборках с одинаковыми именами, но с разными версиями, вы можете попытаться установить время выполнения AssemblyBindings.

Допустим, ваша сборка скомпилирована с более ранней версией двух базовых библиотек., но вы хотите, чтобы ваша же сборка работала с более новой версией базовых библиотек, добавьте следующее в файл app | web.config

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="SoCore"
          publicKeyToken="bdda2d694ae22a86"
          culture="en-us" />
        <bindingRedirect oldVersion="7.0.3000.0-7.0.4002.0" newVersion="7.0.4003.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="SoDatabase"
          publicKeyToken="bdda2d694ae22a86"
          culture="en-us" />
        <bindingRedirect oldVersion="7.0.3000.0-7.0.4002.0" newVersion="7.0.4003.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Перетащите новые сборки и вашу сборку - скомпилированные сстарые базовые сборки, и все должно работать - если только новые базовые сборки не содержат критических изменений в API, от которого вы зависели.

0 голосов
/ 12 июля 2011

Один из подходов состоит в том, чтобы иметь 2 проекта для каждой «идентичной» библиотеки, но использовать один и тот же набор исходных файлов. Это можно сделать, создав второй проект (например, Shared.WebControls6 и Shared.WebControls7) и используя опцию «Добавить как ссылку» при добавлении существующих файлов в новый проект - в существующем проекте уже есть все файлы. Обратите внимание, что это имеет недостаток, заключающийся в том, что любые изменения в файлах проекта (например, добавление нового класса) должны происходить с обоими проектами.

Другим вариантом может стать наворочение в самом файле проекта. Возможно что-то вроде (примечание: не проверено):

<ItemGroup>
  <Reference Include="Authentication.7" Condition=" '$(foo)' == '7' " />
  <Reference Include="Authentication.6" Condition=" '$(foo)' == '6' " />
</ItemGroup>
<!-- or -->
<ItemGroup>
  <Choose>
    <When Condition="'$(foo)'=='7'">
      <Reference Include="Authentication.7" Condition=" '$(foo)' == '7' " />
    </When>
    <Otherwise>
      <Reference Include="Authentication.6" Condition=" '$(foo)' == '6' " />
    </Otherwise>
  </Choose>
</ItemGroup>

Чтобы собрать, вам нужно установить значение foo для версии, с которой вы хотите собрать (например, msbuild myproj.csproj /p:foo=7).

...