5

Tôi có một ứng dụng được phát triển trong Visual Studio 2005 mà tôi đang triển khai bằng cách sử dụng ClickOnce. Giải pháp của tôi chứa hai dự án - một lớp giao diện người dùng được mã hóa bằng VB và một thư viện lớp được mã hóa bằng C#. Thư viện lớp C# của tôi có một số mã sử dụng các hội đồng Interop của Outlook và Excel (Microsoft.Office.Interop.Outlook và Microsoft.Office.Interop.Excel, cả hai phiên bản 11). Đây là câu hỏi của tôi.Microsoft Office Interop Tham chiếu lắp ráp

  1. Mặc dù tôi không tìm thấy điều này được cho là tuyệt đối, hiểu biết của tôi là bạn PHẢI có phiên bản thích hợp của ứng dụng Office (Outlook/Excel) để cài đặt ứng dụng sử dụng hội đồng Interop . Điều này có đúng không?

Nếu (1. = Yes) Sau đó

Làm thế nào bạn sẽ xử lý các tình huống trong đó ứng dụng của bạn sử dụng các hội đồng Interop cho chỉ có một vài tính năng sẽ được sử dụng bởi chỉ có một vài lựa chọn của tổng số cơ sở người dùng? Tại sao tôi phải yêu cầu mọi người dùng ứng dụng của tôi cài đặt Microsoft Office nếu chỉ một số người dùng sẽ cần phải sử dụng các tính năng đó? Các hội đồng Interop này chỉ là các tệp .dll, vì vậy điều gì làm cho chúng khác biệt với những người khác mà bạn không thể xuất bản tệp với dự án của mình và thỏa mãn tham chiếu bất kể phần mềm nào được cài đặt tại máy khách? (Rõ ràng tôi có một sự hiểu biết kém về GAC và nó ảnh hưởng đến hành vi của Visual Studio.) Tôi sẽ vui lòng viết mã của riêng tôi để kiểm tra sự tồn tại của phần mềm Office cần thiết cho một số tính năng sử dụng chúng. Không văn phòng, không có quyền truy cập vào tính năng ...

khác

Nếu hiểu biết của tôi về vấn đề này là không chính xác, sau đó làm thế nào để tôi thiết lập tài liệu tham khảo của tôi và các thiết lập ClickOnce để người dùng không gặp phải các lỗi sau khi cố gắng cài đặt?

"Không thể cài đặt hoặc chạy các ứng dụng. Ứng dụng này yêu cầu văn phòng lắp ráp Version 11.0.0.0 được cài đặt trong Global Assembly Cache (GAC) đầu tiên.

Hãy liên hệ với quản trị hệ thống của bạn."

  • Tôi đã thử đặt tham chiếu Interop Thuộc tính CopyLocal thành True và False.
  • Trong danh sách Tệp ứng dụng ClickOnce của tôi, tôi đã thử đặt các cụm này thành Bao gồm, Loại trừ và Điều kiện tiên quyết.
  • Trong nghiên cứu của tôi, tôi đã thấy một số người có các tham chiếu này trỏ tới * C: \ WINDOWS \ assembly \ GAC *, điểm của tôi tới * C: \ Program Files \ Microsoft Visual Studio 9.0 \ Công cụ Visual Studio cho Office \ PIA \ Office11 * nhưng tôi không tìm thấy cách thay đổi đường dẫn tham chiếu. Theo số http://msdn.microsoft.com/en-us/library/ez524kew(VS.80).aspx, bạn KHÔNG thể thêm tài liệu tham khảo từ GAC, vậy người khác quản lý tài liệu như thế nào?
  • Tôi đã thử sao chép các tham chiếu từ * C: \ Program Files \ Microsoft Visual Studio 9.0 \ Visual Studio Công cụ cho Office \ PIA \ Office11 * vào thư mục dự án của tôi và tham chiếu chúng ở đó.

End Nếu

Tôi cho rằng điều chính tôi cần phải biết là làm thế nào/nếu tôi có thể bao gồm các hội đồng trong tài liệu của tôi và đáp ứng hoặc vượt qua các yêu cầu GAC.

Nếu có thể, hãy cố gắng trả lời các câu hỏi cụ thể của tôi càng trực tiếp càng tốt. Trong khi các bài báo hữu ích, tôi đã đọc rất nhiều bài báo và đã thử A LOT các giải pháp được đề xuất và không tìm thấy thành công nào. Hãy nhớ rằng sự thiếu hiểu biết của tôi về hậu cần của việc này hoạt động như thế nào để bắt đầu.

Tha thứ cho tôi vì sự thiếu hiểu biết của tôi và cảm ơn bạn vì bất kỳ trợ giúp nào bạn có thể cung cấp. Nó được nhiều đánh giá cao!

Trả lời

2

Theo kinh nghiệm của tôi, cố gắng quản lý các hội đồng interop văn phòng trong một kịch bản triển khai rộng là một cơn ác mộng. Nếu bạn đang triển khai thông qua ClickOnce, ngay cả khi bạn gặp vấn đề GAC bạn lưu ý ở trên (có thể do bộ phận CNTT của bạn đẩy đăng ký GAC của hội đồng interop, nếu đây là môi trường công ty), bạn sẽ cần xử lý các tình huống người dùng có một phiên bản Office khác với tiêu chuẩn - và thiên đường giúp bạn khi Office 13 xuất hiện và người dùng bắt đầu nâng cấp và nó phá vỡ ứng dụng của bạn.

Để có thể sử dụng phiên bản interop gắn liền với phiên bản, có thể tự động hóa văn phòng bằng cách sử dụng pinvoke trực tiếp vào trình bao Office COM, phiên bản độc lập (chúng kéo phiên bản văn phòng hiện tại trên máy khách ra khỏi sổ đăng ký). Tuy nhiên, điều này sẽ có những thách thức về triển khai (bạn có thể cần phải cập nhật sổ đăng ký để xử lý các máy đã cài đặt PIA, có thể rất khó khăn khi sử dụng ClickOnce để triển khai) và khó phát triển hơn.

Nếu tôi ở trong giày của bạn, tôi sẽ bắt đầu bằng cách xem xét kỹ chức năng tương tác bạn đang sử dụng trong thư viện lớp học của bạn - có cách nào khác để cung cấp chức năng bạn cần, bên ngoài văn phòng máy khách? Có lẽ một giải pháp hướng dịch vụ mà khách hàng gửi yêu cầu máy chủ để tạo tài liệu văn phòng tùy chỉnh và cung cấp cho nó để tải xuống ...

+0

Cảm ơn bạn đã phản hồi. Cho đến nay tôi chưa có vấn đề xung đột phiên bản - người dùng có cả năm 2003 và 2007 đã có thể sử dụng các tính năng này tốt. Tôi đoán một câu hỏi đơn giản hơn để thực sự nhắm đến những gì tôi đang tự hỏi, tôi có thể cài đặt ứng dụng của mình cho người dùng KHÔNG CÓ BẤT CỨ phiên bản Office, cho phép họ sử dụng các tính năng không tương thích của ứng dụng của tôi không? Tôi hiểu rằng họ phải có Outlook/Excel để sử dụng các tính năng dựa trên Interop của tôi, nhưng hầu hết ứng dụng của tôi không liên quan gì đến Office. –

+0

Tôi muốn nghĩ rằng một ví dụ về mã Interop sẽ không giới hạn hoàn toàn ứng dụng của bạn cho những người đã cài đặt Office. –

+0

Một điều cần thử là sử dụng Tải xuống theo yêu cầu (http://msdn.microsoft.com/en-us/library/ak58kz04(VS.80).aspx) - bạn sẽ có thể mã để trước khi gọi/tải xuống assembly có chứa các lớp interop Office của bạn, có một kiểm tra xem Office có được cài đặt hay không. Những gì tôi không biết là liệu ClickOnce có trì hoãn việc kiểm tra các phụ thuộc cho đến khi hội đồng Tải về theo yêu cầu thực sự được yêu cầu tải xuống hay không, hoặc nếu nó kiểm tra tất cả các phụ thuộc có thể ra khỏi cổng. –

1

Đây là những gì tôi biết từ kinh nghiệm (Tôi nên chỉ ra rằng chúng tôi đã không sử dụng ClickOnce nhưng Tôi không chắc tại sao điều đó lại quan trọng):

Nếu bạn viết thư cho Excel 2003 APIs và triển khai tới máy tính Excel 2007, Excel 2007 sẽ hoạt động vì Excel 2007 cơ bản mạo danh Excel 2003. Vấn đề là một số API đã thay đổi và họ là một vài trong số đó thậm chí đã bị loại bỏ. Bạn sẽ phải tự mình thử xem ứng dụng của bạn có bị ảnh hưởng hay không.

Thực tế, điều này hơi tệ hơn thế. Nếu bạn chạy ứng dụng của bạn trên một máy tính với Excel 2003 và Excel 2007 được cài đặt, việc sử dụng Interop của bạn sẽ vẫn sử dụng Excel 2007.

Một khả năng là sử dụng Excel tương thích Windows Forms kiểm soát được thực hiện hoàn toàn trong một. NET lắp ráp mà bạn có thể triển khai với ứng dụng của bạn - vì vậy ứng dụng của bạn sẽ không phụ thuộc vào Office.

Bạn có thể tải xuống bản dùng thử miễn phí here nếu bạn muốn dùng thử.

Disclaimer: Tôi sở hữu SpreadsheetGear LLC

1

Cách tốt nhất là sử dụng vào cuối thư viện liên kết

https://sourceforge.net/projects/exceldata/

  • không nigthmare với iterops và tlbs với các phiên bản văn phòng khác nhau
  • hỗ trợ khác nhau văn phòng
  • dễ dàng thực hiện sửa đổi

Tuy nhiên:

  • cứng của mình để hỗ trợ thư viện này
0

Sử dụng giao diện COM và late-binding. VB.NET luôn hỗ trợ kết buộc muộn. Chỉ cần sử dụng Marshal.GetActiveObject() và thiết lập kiểu biến của bạn thành Object. Bạn có thể tạo một đối tượng VB.NET thực hiện điều này và gọi nó từ C#.

Với C# bạn bị ràng buộc muộn nếu bạn sử dụng API phản chiếu nhưng thật khó để viết mã bằng cách sử dụng tính năng này. Trong C# 4 bạn cũng có thể bị ràng buộc trễ thông qua kiểu động.

Nếu bạn thực hiện việc này, bạn không cần phải phân phối bất kỳ hội đồng Office nào và mã của bạn sẽ hoạt động miễn là thuộc tính trên các đối tượng trong API Office không thay đổi.

Mã ràng buộc trễ chậm hơn mã ràng buộc sớm nhưng đối với nhiều mục đích, đây không phải là vấn đề.

8

Bạn có thể muốn xem dự án NetOffice: http://netoffice.codeplex.com/.

Đây là một phiên bản miễn phí (MIT License) và hoàn thành (tất cả các phiên bản 2000-2010 và tất cả các ứng dụng Office) của các hội đồng interop độc lập phiên bản. Các hội đồng được tạo ra từ các PIA thực tế với một công cụ, vì vậy chúng được chính xác, đầy đủ và cập nhật, và có khả năng được cập nhật nhanh chóng cho các phiên bản sau này.

Một tính năng thú vị khác là IntelliSense cho mỗi thành viên sẽ hiển thị phiên bản Office nào thực hiện thành viên đó.

Để triển khai, bạn có thể sao chép hoặc cài đặt các hội đồng với ứng dụng của mình.

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