2009-03-26 9 views
0

私は現在、いくつかのアセンブリを必要とするWebプロジェクトに取り組んで構成された本のようなものだ:.NETアセンブリの参照を維持する苦労を緩和する方法はありますか?

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

難易度が展開されているものを追跡するために、私はバージョン番号を更新したいということです各ビルドでのアセンブリAとBの今私は[assembly: AssemblyVersion("1.0.*")]技術でそれをやっていますが、アセンブリAとBの型を参照する多数のASP.NETページとマスターページが含まれているため、WebProjectプロジェクトに大混乱が生じます。

これらの参照を手動で更新するより簡単な方法はありますか?

更新:アセンブリA &は、WebProjectが別のソリューションに存在しますが、&アセンブリは1つのソリューションに存在します。また、& Bは、IIS/SharePointサーバーに展開されるため、厳密な名前が付けられています。

答えて

0

私はTortoiseSVNに含まれているsubwcrevツールを使って1.0.0。$ REV $を1.0.0.25などに置き換える方法について説明したブログを見つけました。それは私が欲しいものをほとんど行う。それは正気です。

+0

リビジョンがUInt16を超えるまで動作します(65535) – hometoast

+0

1日に10回コミットするとします。私はしませんが、推測しましょう。これが問題になる前に6,553日かかるでしょう。それは私に何か異なるものを見つけるために18年を与える。 –

1

コンパイルされたアセンブリを直接参照していますか?ソリューションに追加し、プロジェクト参照として追加することを検討してください。

これを正しく実行すると、複数のアプリケーションで使用されるアセンブリでも同様に動作します。各「親」ソリューションには参照が含まれるためです。もちろん、これにより、「この変更は他のアプリケーションを破りますか」というかなりの量の計画を必要とすることが避けられません。この問題は、インタフェースや抽象クラスをコーディングし、過負荷によって達成できないシグネチャの変化を「改変」として処理し、それらのアセンブリを使用する他のアプリケーションで回帰を必要とすることで少し緩和されます。

1

同じソリューション内のプロジェクトの参照は、自動的に行われます。

AとBが同じソリューションにない場合は、特定のバージョン(参照プロパティを参照)を必要としないように参照を設定できますが、これはコンパイル時のみであることに注意してください。 AまたはBの更新時にWebプロジェクトを再コンパイルする必要があります。

アセンブリバインディングリダイレクトを調べることができない可能性があります。

0

私は、SVNや特定のバージョンコントロールシステムの使用とは無関係に、同じことをするためにpowershellスクリプトを使用します。 Cedaronでのビルドプロセスで

# 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 ; 
} 
1

、我々はビルドスクリプトによってWebプロジェクトのbinディレクトリにコピーする代わりに、参照を宣言することにより、Webプロジェクト内の参照を維持します。

あなたはそれがうまくいくとは思わないでしょうが、それはそうです。それらがbinディレクトリにある場合は、それらを使用することができます。

関連する問題