2011-08-08 33 views
5

Tôi đã xây dựng một ứng dụng, nó tạo ra Excel với COM Interop. Nó hoạt động tốt trên máy của tôi và người dùng của chúng tôi: Office 2007, Windows XP SP2. Bây giờ tôi di chuyển nó sang một máy khác, Office 2010, Windows 7 64 bit và sử dụng studio hình ảnh 2010 từ VS2008, vẫn hoạt động tốt. Khi tôi triển khai nó trên máy của người dùng, tôi sử dụng cùng Windows 7 64 bit nhưng Office 2007.Office 2007 PIA

Vì vậy, nếu tôi cài đặt Office 2007 PIA trên máy tính Win7 64 bit và Office 2010 của mình, hãy thay đổi tham chiếu trong dự án studio trực quan của tôi, điều đó sẽ giải quyết được vấn đề?

+3

Sự cố? * Cái gì * vấn đề? –

+0

Điều gì sẽ xảy ra nếu bạn nhấp vào mỗi cụm văn phòng và bật "Nhúng loại interop"? Tôi nghĩ rằng điều này sẽ làm mất đi sự cần thiết phải quan tâm đến nơi các tập tin PIA hoặc phiên bản đang được sử dụng. –

Trả lời

9

Tôi biết bài đăng này đã trở lại một thời gian, nhưng tôi nghĩ tôi sẽ ném hai xu của mình vào trường hợp ai đó tình cờ gặp nó.

Nguyên tắc chung là sử dụng phiên bản PIA trong việc phát triển liên kết với phiên bản cũ nhất Office bạn dự định hỗ trợ. Vì vậy, nếu bạn định hỗ trợ Office 2007 trở lên, hãy sử dụng phiên bản 12 của PIA trong quá trình phát triển.

Thêm tham chiếu đến v12 PIA (bằng cách tải xuống PIAs 2007 trực tuyến, qua VSTO hoặc từ GAC nếu bạn đã có Office 2007 thay vì trước đó). Bây giờ bạn có thể nghĩ "Ok, tôi tham khảo v12 trong Visual Studio, điều này bây giờ sẽ làm việc trên Office 2007". Sai rồi. Vì bạn đang tham khảo v12 nhưng bạn đã cài đặt Office 2010, trong quá trình lắp ráp, máy của bạn sẽ nói "Vâng, v12 được yêu cầu, nhưng chúng tôi đã cài đặt v14 trong GAC và vì PIA tương thích về phía trước, chúng tôi sẽ sử dụng". Mặc dù bạn nói rõ ràng để sử dụng v12, sau khi hoàn thành việc xây dựng, máy của bạn sẽ sử dụng v14. Bạn có thể xác nhận điều này qua FUSLOG. FUSLOG là một công cụ tuyệt vời để sử dụng khi làm việc với lắp ráp ràng buộc. Lưu ý: Nếu bạn không thấy bất cứ điều gì trong FUSLOG và bạn nghĩ rằng bạn nên, rõ ràng tất cả mọi thứ trong lịch sử Internet Explorer của bạn và thử lại.

Để khắc phục sự cố này, bạn cần phải dừng những gì được gọi là 'assembly binding redirection'. Các PIA này thường có một tệp chính sách với chúng trong GAC. Mục đích của tệp chính sách là chuyển hướng các phiên bản PIA cũ hơn lên các phiên bản mới hơn khi giải quyết hội đồng. Để thấy điều này, hãy làm như sau:

  1. Bấm 'Phím Windows + R' để mở menu chạy.
  2. Nhập 'C: \ Windows \ Assembly \ GAC' và nhấn Enter. Lưu ý: Tôi đang chạy máy 32 bit. PIA của bạn rất có thể sẽ được cài đặt ở một vị trí khác trong GAC, chẳng hạn như 'C: \ Windows \ Assembly \ GAC_MSIL'.

Khi ở trong GAC, cuộn xuống và tìm thư mục PIA bạn tham chiếu (ví dụ: Microsoft.Office.Interop.Excel). Nếu bạn tiếp tục cuộn, bạn sẽ thấy các thư mục bắt đầu bằng 'Chính sách', sau đó là một số, sau đó là tên của PIA (ví dụ: Policy.12.0.Microsoft.Office.Interop.Excel). Đây là tệp chính sách thực hiện chuyển hướng ràng buộc. Mở tập tin cấu hình XML trong thư mục đó và bạn sẽ thấy một cái gì đó tương tự như sau:

<?xml version="1.0" encoding="UTF-16"?><configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity> 
      <bindingRedirect oldVersion="12.0.0.0" newVersion="14.0.0.0"></bindingRedirect> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Trong đoạn mã trên, thẻ "bindingRedirect oldversion ..." chịu trách nhiệm về Chuyển hướng lắp ráp PIA.Nếu bạn nhận xét ra rằng mã như sau:

<?xml version="1.0" encoding="UTF-16"?><configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity> 
      <!--<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>--> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Sau đó chuyển hướng này sẽ bị bỏ qua. Tôi bình luận nó thay vì sau đó xóa đơn giản chỉ vì các tập tin không phục vụ một mục đích tốt, chỉ cần không phải khi phát triển cho các phiên bản cũ của văn phòng. Thực hiện điều này trên mỗi tệp Chính sách PIA mà bạn yêu cầu và máy phát triển của bạn sẽ ngừng chuyển hướng.

Hy vọng điều này sẽ trả lời câu hỏi của bạn!

+1

Đây là một phần thông tin quan trọng! Tôi gặp nhiều rắc rối với việc triển khai ứng dụng của mình vì tôi không nhận ra gốc của vấn đề. Visual Studio luôn hiển thị Phiên bản gốc 11 trong referencename mặc dù bản dựng đã được chuyển hướng, như được mô tả ở trên và trong https://msdn.microsoft.com/en-us/library/2fc472t2%28v=vs.100%29.aspx. – DrMarbuse

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