7

Tôi có mã nguồn của Entlib 5.0 và tôi cần ký tất cả các hội đồng bằng cách sử dụng khóa riêng của mình (tệp snk).Sửa đổi các tệp csproj theo chương trình

Cách đơn giản nhất sẽ được mở file giải pháp EnterpriseLibrary.2010 trong Visual Studio 2010 và sau đó cho từng dự án chọn Properties-> Đăng và chọn Ký tên vào hội và sau đó chọn tập tin quan trọng của bạn.

Nhưng tôi không muốn tự làm điều đó thì tôi có thể viết một kịch bản để tự chỉnh sửa các tập tin dự án và chèn sau vào cuối cùng của danh sách hiện tại của PropertyGroups:

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

Bất kỳ lớp helper trong C# hoặc kịch bản nếu tốt hơn để làm điều đó một cách dễ dàng và nhanh chóng?

+1

Tại sao không viết chương trình C# sử dụng lớp XDocument? –

Trả lời

19

Bạn có thể có một cái nhìn tại namespace Microsoft.Build.BuildEngine MSDN Link

Mẫu mã:

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

Gần đây tôi đã sử dụng một cái gì đó tương tự để thực hiện một loạt các thay đổi trên tất cả các csproj của công ty tôi tệp (hơn 200) thay vì mở thủ công từng dự án và thực hiện thay đổi.

Hy vọng điều này sẽ hữu ích.

+1

chắc chắn, khi tôi sử dụng nó, tôi đã viết một ứng dụng giao diện điều khiển nhìn vào thư mục nguồn của chúng tôi và chọn tất cả các tệp .csproj và sau đó thực hiện các thay đổi tôi cần. Bạn chỉ cần thêm một tham chiếu đến Microsoft.Build.Engine và Microsoft.Build.Framework –

+0

Bạn có biết tắt nếu phần "Post Build Event" của csproj có sẵn thông qua thư viện này không? Tôi đã đánh bắt một chút. Nhưng vẫn chưa tìm thấy nó. Cảm ơn. Và "Upvote" cho phản hồi này. – granadaCoder

+0

chắc chắn, bạn sẽ có thể làm điều gì đó như Mục tiêu postBuild = proj.Targets ["AfterBuild"]; giả định rằng nó không được nhận xét trong tệp dự án. Tôi poked xung quanh trong khoảng 5 giây và không thấy làm thế nào để thêm một Target nếu nó không tồn tại, nhưng tôi biết nó có thể được thực hiện. Ngoài ra, không gian tên này đã lỗi thời và bạn có thể có nhiều may mắn hơn với sự thay thế của nó. –

Các vấn đề liên quan