2009-11-17 37 views
7

Tôi có một ứng dụng giao diện điều khiển C# đơn giản đọc trong một tệp XML được chỉ định người dùng, chạy một phép chuyển đổi XSLT trên đó và xuất kết quả.Làm thế nào để nhúng một tệp XSLT vào một dự án .NET được đưa vào đầu ra .exe?

Khi tôi phân phối ứng dụng của mình cho người dùng, tôi muốn phân phối một tệp .EXE duy nhất. Mã nguồn của tôi bao gồm 3 tệp: tệp .csproj, tệp .cs mã và biểu định kiểu .xslt.

Làm cách nào để thiết lập csproj để tệp .xslt được "nhúng" trong đầu ra và người dùng cuối không thể xem hoặc sửa đổi?

Có vẻ dễ dàng, nhưng tôi không thể hiểu được và Google không quá hữu ích.

Trả lời

13

Bạn có thể nhúng nó vào hội đồng của mình.

Thêm tệp trong giải pháp của bạn, đặt hành động xây dựng thành tài nguyên được nhúng.

Nơi bạn cần đọc tệp sử dụng http://msdn.microsoft.com/en-us/library/xc4235zt.aspx Assembly.GetManifestResourceStream sẽ cung cấp cho bạn luồng mà bạn có thể ghi vào một tệp hoặc sử dụng trực tiếp.

Nếu bạn không hoàn toàn chắc chắn tên tài nguyên của bạn có, tôi tìm thấy Assembly.GetManifestResourceNames hữu ích để liệt kê tất cả các tài nguyên.

+0

+1: Chính xác . –

29

Thêm tệp vào dự án của bạn, sau đó chọn tệp và đi tới cửa sổ Thuộc tính (nhấn F4). Đặt hành động xây dựng thành "Tài nguyên được nhúng". Điều này sẽ khiến tệp được nhúng vào tệp exe dưới dạng tài nguyên.

using(Stream strm = Assembly.GetExecutingAssembly().GetManifestResourceStream("YourAssemblyName.filename.xslt")) 
using (XmlReader reader = XmlReader.Create(strm)) 
{ 
    XslTransform transform = new XslTransform(); 
    transform.Load(reader); 
    // use the XslTransform object 
} 
+1

Để tăng thêm ví dụ của Fredrik, bạn có thể sử dụng không gian tên của ứng dụng của mình làm "YourAssemblyName", như trong '... GetManifestResourceStream (" This.is.my.namespace.filename.xslt "))' – user1585514

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