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秒鐘,並沒有看到如果添加一個目標,如果它不存在,但我知道它可以完成。而且,這個命名空間已經過時,你可能會有更多的運氣。 –

相關問題