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:
- Bấm 'Phím Windows + R' để mở menu chạy.
- 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!
Sự cố? * Cái gì * vấn đề? –
Đ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. –