Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 创建单独的ClickOnce安装,这些安装可以通过使用MSBUILD更改程序集名称一起安装_Visual Studio 2010_Msbuild_Clickonce_Msbuild 4.0 - Fatal编程技术网

Visual studio 2010 创建单独的ClickOnce安装,这些安装可以通过使用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脚本创建发布,它看起来如下所示:

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