2009-12-07 32 views
5

Hiện tại chúng tôi đang có giải pháp được phát triển bằng SSIS/C#. Gói SSIS (trong số những thứ khác) có một tác vụ kịch bản sử dụng logic được phát triển trong các thư viện lớp. Chức năng này cần phải tách biệt với gói SSIS.Tự động triển khai giải pháp SSIS/DLL hỗn hợp

Vì chúng tôi đang sử dụng gói SSIS, tôi hiểu rằng cần phải biên dịch DLL đã biên dịch sang GAC và sau đó được tham chiếu từ tác vụ tập lệnh. Tuy nhiên điều này đang tạo ra một vấn đề triển khai cho chúng tôi.

Công cụ triển khai tự động của chúng tôi (đúng) tự động tăng số phiên bản của DLL, sau đó được xuất bản lên GAC. Tuy nhiên điều này phá vỡ gói SSIS, vì nó sẽ cố gắng và truy cập vào DLL dựa trên số phiên bản mà chúng đã được xuất bản cho máy phát triển GAC như.

Giải pháp duy nhất mà chúng tôi phải thực hiện là lấy các tệp DLL đã biên dịch, thủ công sửa đổi nhiệm vụ tập lệnh gói SSIS và sau đó xuất bản gói.

Có vẻ như phải có cách tốt hơn để thực hiện việc này - có ai gặp sự cố này và đưa ra giải pháp tốt hơn không? Hoặc có điều gì đó cơ bản trong cách tiếp cận của chúng ta, chúng ta cần phải thay đổi (ngoài việc loại bỏ sự cần thiết của DLL)?

Cảm ơn!

Trả lời

8

Vâng, sau nhiều nghiên cứu, tôi chưa bao giờ thực sự đưa ra giải pháp thỏa đáng cho điều này. Cuối cùng gần nhất tôi có thể nhận được là một giải pháp mà tôi nạp tài liệu tham khảo của tôi tự động:

Dim rsAssembly As Assembly = Assembly.LoadFile("path from config file") 
    Dim rsType As Type = rsAssembly.GetType("class name from config file") 
    Dim obj As Object = Activator.CreateInstance(rsType) 

Điều này cho phép tôi để tạo ra các đối tượng tôi yêu cầu (mặc dù đáng chú ý là bất kỳ tài liệu tham khảo phụ thuộc khác cũng cần phải bằng cách tự động tải hoặc một phần của GAC, mặc dù ít nhất là không có sự phụ thuộc vào số phiên bản).

văn vào đây để tìm tương lai, nhưng nếu có ai đi lên với một cái gì đó tốt hơn tôi vẫn sẽ rất tò mò muốn biết làm thế nào bạn giải quyết nó - bài ở đây và tôi sẽ ghi cho bạn câu trả lời :)

0

Bạn có chắc chắn rằng những tệp DLL được chia sẻ phải được triển khai cho GAC không? Nếu chúng nằm trong cùng thư mục với gói SSIS, chúng có thể được phát hiện bởi khung công tác mà không cần thêm chúng vào GAC.

Không có cách nào để cập nhật hệ thống xây dựng của bạn để tránh thay đổi số phiên bản? Nếu mã của các hội đồng đó không thay đổi, không cần phải cập nhật số phiên bản.

Nếu bạn không thể tránh tăng phiên bản, cách khác là xây dựng một tệp chính sách cùng với các hội đồng chia sẻ và sử dụng để "chuyển hướng" gói SSIS đến phiên bản mới với mỗi bản dựng.

+0

Thông tin tôi có là các gói SSIS phải được triển khai tới GAC, tuyệt vời nếu không - nhưng bạn có chắc không? http://www.developerdotstar.com/community/node/333 Số bản dựng - Tôi đoán chúng tôi có thể, nhưng ý tưởng này khiến tôi hơi khó chịu. Tôi đã không sử dụng tập tin chính sách trước đây, tôi sẽ đi và có một cái nhìn vào họ, nhờ – Chris

+0

Tôi đã không thử một gói SSIS với phụ thuộc bên ngoài, vì vậy tôi không chắc chắn. Nên khá dễ dàng để xây dựng một mô hình của gói của bạn với sự phụ thuộc và làm một thử nghiệm khói nhanh chóng ... –

+0

Xin chào Dave - tôi đã điều tra các tập tin chính sách khi chúng liên quan đến các giải pháp SSIS, tôi không thể thực sự thấy cách tôi sẽ giới thiệu một cái mà không tạo ra sự phụ thuộc khác. Tôi có thể thiếu một cái gì đó, nhưng nếu bạn có bất kỳ thông tin bổ sung về cách họ có thể được sử dụng với các gói SSIS nó sẽ được nhiều đánh giá cao! – Chris

1

tôi đã nhận thấy các vấn đề tương tự với kết hợp SSIS/C# của chúng tôi. Chúng tôi cũng dựa vào một dll bên ngoài (để SSIS). Trong trường hợp của chúng ta, DLL phải được sao chép vào thư mục 100/DTS/Binn để cho phép gói SSIS làm việc từ bên trong Visual Studio, tuy nhiên khi chúng ta cố gắng chạy gói bằng cách sử dụng SQL Package Execution Utility, chúng ta sẽ gặp lỗi không thể tìm thấy tệp. Nó dường như không chỉ ra một vấn đề phiên bản rất nhiều như là một sự khác biệt trong PATH giữa Visual Studio và tiện ích thực hiện gói. Thậm chí chạy gói mà không gỡ lỗi từ Visual Studio hoạt động. Tôi sẽ xem xét vấn đề phiên bản để xem có thể đó là khiếu nại cốt lõi trên hệ thống của chúng tôi hay không, nhưng từ bộ nhớ, tôi nghĩ rằng đó là một lỗi không tìm thấy trong tệp không ảnh hưởng đến chúng tôi. Chúng tôi đang sử dụng MSSQL 2008 nếu điều đó tạo nên sự khác biệt.

+1

Trong phần tiếp theo, tôi có thể thực hiện thành công gói bằng cách sao chép tệp DLL vào máy chủ lưu trữ máy windows \ assembly thư mục. Rõ ràng đây là vị trí GAC khó nắm bắt? Dù sao cơ chế triển khai của chúng tôi không được tự động nhưng vì vậy có lẽ đó là lý do tại sao chúng tôi không gặp vấn đề về phiên bản. Một khi tôi sao chép dll vào thư mục lắp ráp windows \ gói chạy đến hoàn thành. – Travis

+1

Hi Travis - vâng, đó là vị trí của GAC, không chắc chắn về các hạn chế đối với SQL 2008 nhưng nếu nó giúp tôi có thể xác nhận cho bạn rằng trong một máy chủ được triển khai trên SQL 2005, DLL phải được triển khai tới GAC: ( – Chris

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