tes*_*est 9 msbuild clickonce visual-studio-2010 msbuild-4.0
我使用MSBUILD脚本来创建发布,它看起来像这样:
msbuild "<Project>.vbproj"
/t:Publish
/p:Configuration=Release
/p:ProductName="<Application Name> - <Region Name>"
/p:PublishDir="<Region Specific>"
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是正常的.
是否可以使用MSBUILD创建多个发布到可以一起安装的不同位置?我知道,如果应用程序是相同的,默认情况下ClickOnce不允许您从其他位置安装应用程序(我相信它通过使用程序集名称来确定).
我在这里回顾了这个帖子:
因此,我修改了我的脚本来执行此操作:
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>"
Run Code Online (Sandbox Code Playgroud)
但是我得到了大量的错误(比如1300+),但我不确定发生了什么.但是,如果我在Visual Studios中更改程序集名称并构建它,一切都很好.
有什么想法吗?
Art*_*zzo 10
会发生的是,在主项目的依赖链中,msbuild构建的所有项目中都会覆盖属性AssemblyName.这导致了许多编译错误.当您通过visual studio更改assemblyName时,您只更改主项目,这使其能够正确构建.在我的一个项目中,我所做的是在名为OverridenAssemblyName的主.vbproj文件中添加一个属性,并在OverridenAssemblyName不为null时设置AssemblyName = OverridenAssemblyName.这样,您只能为要发布的项目设置AssemblyName,以保持其他项不变.
编辑:
让我们想象一下你有2个项目的场景.项目A,即要发布的项目,项目B,由项目A引用.在.vbproj文件中,您有这样的标记<AssemblyName>YourProjectName</AssemblyName>.因此,在项目A文件中,您将拥有<AssemblyName>Project A</AssemblyName>,<AssemblyName>Project B</AssemblyName>在项目B中.
该标记用于定义在构建期间为项目创建的程序集的名称.
传入 /p:AssemblyName="<Application Name>_<Region Name>"msbuild命令行时,您将覆盖构建过程中每个项目的标记AssemblyName.由于该属性定义了项目的程序集名称,因此所有项目都使用相同的名称生成其程序集.那可能是你问题的原因.
可能的解决方案是执行以下操作:
将其添加到您的主项目(要发布的项目)
<PropertyGroup Condition="$(PublishAssemblyName) != ''">
<AssemblyName>$(PublishAssemblyName)</AssemblyName>
</PropertyGroup>
将命令行更改为:
msbuild "<Project>.vbproj"
/t:Publish
/p:Configuration=Release
/p:ProductName="<Application Name> - <Region Name>"
/p:PublishDir="<Region Specific Unc>"
/p:PublishAssemblyName="<Application Name>_<Region Name>"
我希望能帮助你.