Visual studio 2010 创建单独的ClickOnce安装,这些安装可以通过使用MSBUILD更改程序集名称一起安装
我正在使用MSBUILD脚本创建发布,它看起来如下所示:Visual studio 2010 创建单独的ClickOnce安装,这些安装可以通过使用MSBUILD更改程序集名称一起安装,visual-studio-2010,msbuild,clickonce,msbuild-4.0,Visual Studio 2010,Msbuild,Clickonce,Msbuild 4.0,我正在使用MSBUILD脚本创建发布,它看起来如下所示: msbuild "<Project>.vbproj" /t:Publish /p:Configuration=Release /p:ProductName="<Application Name> - <Region Name>" /p:PublishDir="<Region Specific>" msb
msbuild "<Project>.vbproj"
/t:Publish
/p:Configuration=Release
/p:ProductName="<Application Name> - <Region Name>"
/p:PublishDir="<Region Specific>"
msbuild.vbproj”
/t:出版
/配置=发布
/p:ProductName=”
正因为如此,我修改了我的脚本:
msbuild "<Project>.vbproj"
/t:Publish
/p:Configuration=Release
/p:ProductName="<Application Name> - <Region Name>"
/p:PublishDir="<Region Specific Unc>"
/p:AssemblyName="<Application Name>_<Region Name>"
msbuild.vbproj”
/t:出版
/配置=发布
/p:ProductName=“-”
/p:PublishDir=“”
/p:AssemblyName=“\u1”
然而,我得到了大量的错误(如1300+),但我不确定发生了什么。但如果我在Visual Studio中更改程序集名称并构建它,一切都会很好
有什么想法吗?发生的情况是,在主项目的依赖链中的所有项目msbuild生成中,属性AssemblyName都被重写。这会导致许多编译错误。通过visual studio更改AssemblyName时,仅更改主项目,从而使其能够正确生成。在我所做的一个项目是在主.vbproj文件上添加一个名为OverridEnableAssemblyName的属性,并在OverridEnableAssemblyName不为null时设置AssemblyName=OverridEnableAssemblyName。这样,您就可以只为要发布的项目设置AssemblyName,而保持其他项目的完整性
编辑:
让我们设想一个场景,您有两个项目。项目a是要发布的项目,项目B是由项目a引用的。在.vbproj文件中,您有如下标记YourProjectName
。因此,在项目a文件中,您将有projectA
,在项目B中有projectB
该标记用于定义在生成期间为项目创建的程序集的名称
当您传递/p:AssemblyName=”时_“
在msbuild命令行中,您正在覆盖生成过程中每个项目的标记AssemblyName。由于该属性定义了项目的程序集名称,因此所有项目都将使用相同的名称生成其程序集。这可能就是你的问题所在
一种可能的解决方案是执行以下操作:
将其添加到主项目(要发布的项目)
$(PublishAssemblyName)
将命令行更改为:
msbuild.vbproj”
/t:出版
/配置=发布
/p:ProductName=“-”
/p:PublishDir=“”
/p:PublishAssemblyName=“\u1”
我希望这能对您有所帮助。我只能成功地执行一次msbuild/publish,然后编写一个单独的“deploy”程序,在清单移动到每个环境时对其进行更改和重新签名。它将部署到QA,给它一个新的名称和配置文件。然后,稍后再次将其“部署”到生产环境中,同时为其提供一个新名称和配置文件
该过程需要重命名以删除.deploy扩展名、替换配置文件、更改应用程序清单、更改部署清单(同样在我的情况下,由于我正在执行vsto excel加载项,所以更新.xlsx文件),然后退出应用程序清单、还原.deploy扩展名、退出部署清单,最后将结果复制到部署位置
这将导致部署到QA,当“单击一次”在添加/删除程序中创建“应用程序QA”,以及生产部署,当“单击一次”创建“应用程序产品”。这两者可以同时运行,因为程序集名称和“solutionId”guid在每个环境中都已更新为不同
下面是一些关于如何更改应用程序和部署清单的代码,以在每个环境中为它们指定唯一的名称。如果您决定采用这种方法,并且希望获得辞职代码,我可以提供帮助
Private函数UpdateAppManifestBasedOnTarget(调用者为IReleaseeExecutionCaller,appName为String,appManifestFileInfo为IO.FileInfo)为String
Log.Write(Me.Name,String.Format(“根据目标环境更新应用程序清单…”)
Dim appManifestXML作为新的Xml.XmlDocument()
将appManifestXML名称空间作为新的Xml.XmlNamespaceManager(appManifestXML.NameTable)进行调整
appManifestNamespaces.addNamespaces(“asmv1”,“urn:schemas-microsoft-com:asm.v1”)
appManifestNamespaces.addNamespaces(“vstav3”、“urn:schemas-microsoft-com:vsta.v3”)
appManifestNamespaces.addNamespaces(“vstov4”、“urn:schemas microsoft com:vsto.v4”)
appManifestXML.Load(appManifestFileInfo.FullName)
“身份
Dim assemblyNode=appManifestXML。选择SingleNode(“/asmv1:assembly/asmv1:assemblyIdentity”,appManifestNamespaces)
assemblyNode.Attributes(“name”).Value=appName&“-”&caller.Release.EnvironmentCode&“.dll”
“描述
Dim descNode=appManifestXML.SelectSingleNode(“/asmv1:assembly/asmv1:description”,appManifestNamespaces)
descNode.InnerXml=appName&“-”&caller.Release.EnvironmentCode
'soluionid guid
Dim custNode=appManifestXML.SelectSingleNode(“/asmv1:assembly/vstav3:addIn/vstav3:application/vstov4:customizations/vstov4:customization/vstov4:document”,appManifestNamespaces)
Dim currentGUID=custNode.Attributes(“solutionId”).Value
Dim newGuid为String=String.Format(“{0:x8}{1}”,caller.Release.EnvironmentCode.ToLower.GetHashCode(),currentGUID.Substring(8))
custNode.Attributes(“solutionId”).Value=newGuid
appManifestXML.Save(appManifestFileInfo.FullName)
返回新GUID
端函数
Private Sub UpdateDeploymentManifestBasedOnTarget(调用方为IReleaseeExecutionCaller,appName为String,vstoFileInfo为IO.FileInfo)
Log.Write(Me.Name,String.Format(“根据目标环境更新部署清单…”)
Dim vstoXML作为新的Xml.Xml文档
Dim vstoManifestNamespaces作为新的Xml.XmlNamespaceManager(vstoXML.NameTable)
AddNamespaces(“asmv1”,“urn:sc