When I add a reference to my project, I usually want to use Specific Version = FALSE. This is because our automated build will set the version number. I see the default behavior is 开发者_运维知识库to be TRUE.
Is there a way to change this? Counting on manually changing that value is error prone (and I end up breaking the build).
Create AddIn Project, and try it:
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj80
Public Class Connect
Implements IDTExtensibility2
Private _app As DTE2
Private WithEvents _RefEvents As ReferencesEvents
'''<summary>Implements the constructor for the Add-in object. Place your initialization code within this method.</summary>
Public Sub New()
End Sub
'''<summary>Implements the OnConnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being loaded.</summary>
'''<param name='application'>Root object of the host application.</param>
'''<param name='connectMode'>Describes how the Add-in is being loaded.</param>
'''<param name='addInInst'>Object representing this Add-in.</param>
'''<remarks></remarks>
Public Sub OnConnection(ByVal application As Object, ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_app = CType(application, DTE2)
_RefEvents = CType(_app.Events.GetObject("VBReferencesEvents"), ReferencesEvents)
End Sub
'''<summary>Implements the OnDisconnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being unloaded.</summary>
'''<param name='disconnectMode'>Describes how the Add-in is being unloaded.</param>
'''<param name='custom'>Array of parameters that are host application specific.</param>
'''<remarks></remarks>
Public Sub OnDisconnection(ByVal disconnectMode As ext_DisconnectMode, ByRef custom As Array) Implements IDTExtensibility2.OnDisconnection
End Sub
'''<summary>Implements the OnAddInsUpdate method of the IDTExtensibility2 interface. Receives notification that the collection of Add-ins has changed.</summary>
'''<param name='custom'>Array of parameters that are host application specific.</param>
'''<remarks></remarks>
Public Sub OnAddInsUpdate(ByRef custom As Array) Implements IDTExtensibility2.OnAddInsUpdate
End Sub
'''<summary>Implements the OnStartupComplete method of the IDTExtensibility2 interface. Receives notification that the host application has completed loading.</summary>
'''<param name='custom'>Array of parameters that are host application specific.</param>
'''<remarks></remarks>
Public Sub OnStartupComplete(ByRef custom As Array) Implements IDTExtensibility2.OnStartupComplete
End Sub
'''<summary>Implements the OnBeginShutdown method of the IDTExtensibility2 interface. Receives notification that the host application is being unloaded.</summary>
'''<param name='custom'>Array of parameters that are host application specific.</param>
'''<remarks></remarks>
Public Sub OnBeginShutdown(ByRef custom As Array) Implements IDTExtensibility2.OnBeginShutdown
End Sub
Private Sub _RefEvents_ReferenceAdded(ByVal pReference As Reference) Handles _RefEvents.ReferenceAdded
If pReference.Version <> "0.0.0.0" Then
CType(pReference, Reference3).SpecificVersion = True
End If
End Sub
End Class
There's not a way to change the default. If you're using TFS you could probably apply a check-in rule, but I am unsure if a check-in rule can be applied to a .csproj or .sln file.
I would say you should not change the assembly version with each build. You should use the file version for that purpose.
Suzanne Cooke has a nice blog post explaining it in detail, but that summary is that the file version of an assembly need not be the same than the assembly version and for builds you need to up the file version the whole time and not the assembly version.
Suzanne Cook's blog post
精彩评论