Есть ли способ облегчить задачу поддержки ссылок на сборки .NET? - PullRequest
0 голосов
/ 26 марта 2009

В настоящее время я работаю над веб-проектом, который включает в себя несколько сборок, структурированных примерно так:

WebProject
 |
 +--> A (external assembly, Version 1.0.0.0)
 |
 +--> B (external assembly, Version 1.0.0.0)

Сложность состоит в том, что для отслеживания того, что развернуто, я хотел бы обновлять номера версий сборок A и B при каждой сборке. Прямо сейчас я делаю это с техникой [assembly: AssemblyVersion("1.0.*")], но это наносит ущерб проекту WebProject, поскольку он содержит несколько страниц ASP.NET и главных страниц, которые ссылаются на типы в сборках A и B.

Есть ли более простой способ обновить эти ссылки, чем вручную?

Обновление : сборки A & B живут в одном решении, а WebProject - в другом. Кроме того, A & B строго названы, поскольку они развернуты на серверах IIS / SharePoint.

Ответы [ 5 ]

1 голос
/ 12 мая 2009

В процессе сборки в Cedaron мы поддерживаем ссылки в веб-проекте, копируя их в каталог bin веб-проекта с помощью сценария сборки вместо объявления ссылок.

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

1 голос
/ 26 марта 2009

При наличии ссылок на проект в одном решении это делается автоматически.

Если A и B не находятся в одном и том же решении, вы можете установить ссылки на них, чтобы они не требовали конкретной версии (посмотрите в свойствах ссылок), но имейте в виду, что это только для времени компиляции, так что вы все равно необходимо перекомпилировать веб-проект при обновлении A или B.

Если вы не сможете посмотреть перенаправление привязки сборки.

1 голос
/ 26 марта 2009

Вы ссылаетесь на скомпилированные сборки напрямую? Попробуйте добавить их в свое решение и включить их в качестве ссылок на проекты.

Если вы все сделаете правильно, это будет работать и со сборками, которые используются несколькими приложениями, поскольку каждое «родительское» решение может содержать ссылки. Конечно, это приводит к неизбежной проблеме знания того, «нарушает ли это изменение какие-либо другие приложения», что требует значительного объема планирования. Эту проблему немного облегчают путем кодирования интерфейсов и / или абстрактных классов и обработки любого изменения в сигнатуре, которое не может быть выполнено посредством перегрузки, как «критическое изменение», требующее регрессии в других приложениях, использующих эти сборки. *

0 голосов
/ 12 мая 2009

Я использую сценарий powershell, чтобы сделать то же самое, независимо от использования SVN или какой-либо конкретной системы управления версиями.

# SetVersion.ps1
#
# Set the version in all the AssemblyInfo.cs or AssemblyInfo.vb files in any subdirectory.
#
# usage:  
#  from cmd.exe: 
#     powershell.exe SetVersion.ps1  2.8.3.0
# 
#  from powershell.exe prompt: 
#     .\SetVersion.ps1  2.8.3.0
#
# last saved Time-stamp: <2009-February-11 22:18:04>
#


function Usage
{
  echo "Usage: ";
  echo "  from cmd.exe: ";
  echo "     powershell.exe SetVersion.ps1  2.8.3.0";
  echo " ";
  echo "  from powershell.exe prompt: ";
  echo "     .\SetVersion.ps1  2.8.3.0";
  echo " ";
}


function Update-SourceVersion
{
  Param ([string]$Version)

  $NewVersion = 'AssemblyVersion("' + $Version + '")';
  $NewFileVersion = 'AssemblyFileVersion("' + $Version + '")';

  foreach ($o in $input) 
  {

    #### !! do Version control checkout here if necessary 
    Write-output $o.FullName
    $TmpFile = $o.FullName + ".tmp"

     get-content $o.FullName | 
        %{$_ -replace 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)', $NewVersion } |
        %{$_ -replace 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)', $NewFileVersion }  > $TmpFile

     move-item $TmpFile $o.FullName -force
  }
}


function Update-AllAssemblyInfoFiles ( $version )
{
  foreach ($file in "AssemblyInfo.cs", "AssemblyInfo.vb" ) 
  {
    get-childitem -recurse |? {$_.Name -eq $file} | Update-SourceVersion $version ;
  }
}


# validate arguments 
$r= [System.Text.RegularExpressions.Regex]::Match($args[0], "^[0-9]+(\.[0-9]+){1,3}$");

if ($r.Success)
{
  Update-AllAssemblyInfoFiles $args[0];
}
else
{
  echo " ";
  echo "Bad Input!"
  echo " ";
  Usage ;
}
0 голосов
/ 25 апреля 2009

Оказывается, я нашел блог, описывающий способ использования инструмента subwcrev, включенного в TortoiseSVN, для замены 1.0.0. $ REV $ на 1.0.0.25 или что-то еще. Это в значительной степени делает то, что я хочу. Это нормально.

...