C# 每个生成的程序集名称都是唯一的

C# 每个生成的程序集名称都是唯一的,c#,pre-build-event,C#,Pre Build Event,我试图在生成过程中更改dll的程序集名称。我已经创建了另一个exe来更改csproj文件中的程序集名称,我在预构建期间执行该文件。但我对csproj文件的更改似乎只有在构建完成后才生效,这当然不是我想要的 程序集名称在每次生成时都必须是唯一的,因此我通过附加GUID来创建它 var xmlDoc = XDocument.Load(projectFile); XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";

我试图在生成过程中更改dll的程序集名称。我已经创建了另一个exe来更改csproj文件中的程序集名称,我在预构建期间执行该文件。但我对csproj文件的更改似乎只有在构建完成后才生效,这当然不是我想要的

程序集名称在每次生成时都必须是唯一的,因此我通过附加GUID来创建它

var xmlDoc = XDocument.Load(projectFile);
XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
string newAssemblyName = originalAssemblyName + "_" + Guid.NewGuid().ToString("N");

xmlDoc.Element(ns + "Project").Element(ns + "PropertyGroup").Element(ns + "AssemblyName").Value = newAssemblyName;

xmlDoc.Save(projectFile);

我想知道是否有一种方法可以在预构建期间“强制”重新加载csproj,或者是否有另一种方法可以在每次构建解决方案时获得唯一的程序集名称

我在VS2013的csproj文件中成功地做到了这一点:

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
[...]
  <PropertyGroup>
    <MyNewGuid>$([System.Guid]::NewGuid())</MyNewGuid>
  </PropertyGroup>
[...]
  <AssemblyName>$(MyNewGuid)</AssemblyName>

[...]
$([System.Guid]::NewGuid())
[...]

构建后复制可能是一种廉价且肮脏的解决方案。。。另外,你所做的感觉很奇怪,可能有更好的解决方案来解决你试图解决的原始问题(如卸载插件应用程序域)。我不是说你做错了什么,但我也非常好奇为什么你每次都需要一个唯一的程序集名称。我确实在另一个应用程序中加载dll。我最初的问题是另一个应用程序锁定了dll,所以我需要关闭它,构建我的dll,然后再次加载应用程序。所以我试着自动化我的手工操作。我曾尝试重命名旧的dll,然后构建一个新的dll,但我认为我加载它的应用程序缓存了它,因为我唯一能让它加载新dll的方法是更改程序集名称。当然,我也愿意寻求更好的解决方案!为什么使用DLL的应用程序不在加载DLL之前将其复制到本地临时目录?这样,绝对路径为每个使用它的应用程序创建一个唯一的dll名称。