重命名.NET 2.0可执行文件

4
有人知道在后期构建事件中更改C# .NET 2.0可执行文件名称时是否有任何陷阱吗?此可执行文件具有强名称和嵌入式清单。此外,在打包安装程序之前,该可执行文件将由第三方签名。
我知道任何相关的.config文件也需要重命名以反映新的可执行文件名称。
我猜想最好的解决方案是在项目属性中更改程序集名称,而不是重命名可执行文件名称。问题是Visual Studio无法使用条件程序集名称(即在.csproj中向添加条件属性)。

你似乎提到了两个问题,但都没有描述清楚。不,重命名文件从来不是真正的问题。 - Hans Passant
4
强名称(Strong Naming)exe 没有真正的好处。强名称 dll 的好处是,别人无法用恶意版本替换它(而且你可以将其放入 GAC 中)。除非你在另一个项目中将 exe 引用为 dll(这很奇怪),否则你不需要强名称化它。 - jonathanpeppers
@Jonathan.Peppers - 这听起来更像是一个答案而不是评论。如果您将其作为答案发布,我们可以投票支持它! - RQDQ
刚刚完成了。有时我觉得评论和答案之间存在一个灰色地带,因为我不能百分之百确定去掉强名称是否能解决他的问题,尽管它很可能不是必需的。 - jonathanpeppers
@RQDQ - Jonothan没有回答我的问题,这就是为什么我说它应该是一个评论而不是一个答案。我从来没有问过是否强命名可执行文件会有问题,我问的是重命名托管可执行文件(恰好是强命名和具有嵌入式清单)是否会有问题。这是有价值的信息,但并没有回答我的问题。 - Brent Newbury
@Hans Passant - 我从未提到问题,我只是问了一个简单的问题(附带一个额外的问题),你已经给出了一个简单的答案。谢谢你回答我的问题。 - Brent Newbury
2个回答

2

Visual Studio会将项目加载到内存中,如果你想从Visual Studio中构建两个程序集,你可以添加AfterBuild目标并调用MSBuild再次构建程序集,但需要使用不同的参数:

<ProperttyGroup Condition="'$(BuildAgain)'==''">
     <!-- Default parameters to VS -->
     <AssemblyName>Name1,Default</AssemblyName>   
<ProperttyGroup>

<ProperttyGroup Condition="'$(BuildAgain)'=='true'">
     <!-- Overrided parameters -->
     <AssemblyName>Name2.Custom</AssemblyName>   
<ProperttyGroup>

<Target Name="AfterBuild"
        Condition="'$(BuildAgain)'==''">
     <MSBuild Projects="$(MSBuildProjectFullPath)"
              Properties="BuildAgain=true;Configuration=$(Configuration);Platform=$(Platform)"
              Targets="Rebuild" 
</Target>

非常好用!唯一需要注意的是,AfterBuild目标应该有Condition=' $(BuildAgain) =='' 以防止出现错误“在目标依赖图中涉及目标“Build”的循环依赖关系”。 - Brent Newbury

1

强命名一个exe没有真正的好处。强命名dll的好处是,别人无法用恶意版本替换它(并且您可以将其放入GAC中)。除非您将exe作为dll在另一个项目中引用(这很奇怪),否则您不需要强命名它。


1
这只是我们一直以来的做法。感谢您提供的信息,我总是欣赏任何其他知识,但也许这应该作为评论而不是答案呢?这会降低有人尝试从列表中回答问题的可能性。再次感谢您的贡献。 - Brent Newbury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接