7

我有Entlib 5.0的源代码,我需要使用我自己的密钥(snk文件)签署所有程序集。以编程方式修改csproj文件

最简单的方法是打开EnterpriseLibrary.2010解决方案文件在Visual Studio 2010 然后为每个项目选择属性 - >签名并选择登录大会,然后选择您的密钥文件。

但我不想这样做手工然后我可以写一个脚本来手动编辑项目文件并插入在PropertyGroups当前列表的末尾如下:

<PropertyGroup> 
    <SignAssembly>true</SignAssembly> 
    </PropertyGroup> 
    <PropertyGroup> 
    <AssemblyOriginatorKeyFile>keyFile.snk</AssemblyOriginatorKeyFile> 
    </PropertyGroup> 

任何辅助类在C#或脚本编写如果更好的做它容易和快捷的方式?

+1

为什么不写一个使用XDocument类的C#程序? –

回答

19

你可以看看Microsoft.Build.BuildEngine命名空间MSDN Link

示例代码:

Engine eng = new Engine() 
Project proj = new Project(eng); 
proj.Load(FullProjectPath); 
proj.SetProperty("SignAssembly", "true"); 
proj.Save(FullProjectPath); 

我同样做了一系列的变化在所有我公司的.csproj最近使用过的东西文件(超过200个),而不是手动打开每个项目并进行更改。

希望这会有所帮助。

+1

当然,当我使用它时,我编写了一个控制台应用程序,它查看了我们的源代码目录并拾取了所有.csproj文件,然后进行了所需的更改。你只需要添加一个对Microsoft.Build.Engine和Microsoft.Build.Framework的引用 –

+0

如果csproj的“Post Build Event”部分可以通过这个库获得,你知道吗?我钓了一点点。但还没有找到它。谢谢。和“Upvote”这个回应。 – granadaCoder

+0

当然,你应该可以做点像 Target postBuild = proj.Targets [“AfterBuild”]; 假设它在项目文件中未被评论。我捅了大约5秒钟,并没有看到如果添加一个目标,如果它不存在,但我知道它可以完成。而且,这个命名空间已经过时,你可能会有更多的运气。 –

相关问题