2015-08-12 47 views
27

Các DLL này không được thêm vào dự án của tôi trong các phiên bản trước của Visual Studio. Tôi đoán là một trong những tài liệu tham khảo của tôi có sự phụ thuộc vào các DLL này. Từ những gì tôi đã đọc, các đánh dấu Microsoft.Office.Interop.Excel có thể là một. bất cứ ai có thể xác nhận điều này? Tôi cũng nên lưu ý rằng VS 2015 luôn xuất bản các tệp DLL này ngay cả khi tôi loại trừ chúng khỏi dự án. Nếu tôi xóa chúng, VS 2015 sẽ làm lại chúng.Tại sao Visual Studio 2015 thêm stdole.dll và Microsoft.AnalysisServices.AdomdClient.dll vào dự án của tôi?

Chỉnh sửa: Tôi đã xác nhận rằng các tham chiếu Excel và Office là những gì gây ra sự bao gồm của stdole.dll. Xem câu trả lời được chọn dưới đây để loại bỏ stdole.dll.

Tôi đã vượt qua các tham chiếu tùy chỉnh. Hãy cho tôi biết nếu cần thêm thông tin. Dưới đây là tài liệu tham khảo hiện tại của tôi:

enter image description here

enter image description here

+5

Làm thế nào về điều đó? Downvote đầu tiên của tôi. Một downvote không có phản hồi là rất không hiệu quả. –

+1

Tôi quan tâm đến câu hỏi này, bởi vì stdole.dll đang bật lên trên tất cả các ứng dụng mà tôi làm. Tôi xuất bản với nhấp một lần và nó gây ra lỗi với studio trực quan 2015. Nó có thể không liên quan đến câu hỏi này, nhưng những người khác có thể tìm thấy câu hỏi này tìm kiếm dll đó. Anh chàng này, anh ta đã thay thế nó bằng một bản sao đã ký trong: https://iznum.wordpress.com/2013/04/22/strong-name-signature-not-valid-for-this-assembly-stdole-dll/ – 249076

+1

Một tên khác đã đăng lỗi về điều này: https://connect.microsoft.com/VisualStudio/feedback/details/1658072/could-not-load-assembly-file-stdole-dll-that-were-not-actually-using – 249076

Trả lời

12

Nếu bạn có các tùy chọn, sử dụng Nhúng Interop loại và để lại stdole.dll ra khỏi nó tất cả cùng nhau hoặc bạn sẽ chạy vào các vấn đề mỗi khi bạn di chuyển ứng dụng (máy chủ mới hoặc máy dev) nơi stdole.dll không được ký.

Sự cố: Có một tham chiếu yêu cầu stdole.dll và stdole.dll hiện đang được tự động đẩy vào thư mục bin.

Giải pháp:

  • Tìm tài liệu tham khảo cần stdole.dll (thêm về làm thế nào để làm điều này dưới đây)
  • Tới đó là tài sản (phải cấp nhấp chuột> properties)
  • Thay đổi "Nhúng Interop Types "từ sai đến đúng.

Làm thế nào để tìm tài liệu tham khảo: Khi bạn bấm vào các thuộc tính của tài liệu tham khảo của bạn, hãy kiểm tra xem nếu "Nhúng Interop loại" được thiết lập là false. Để đào sâu hơn nữa, Nick's answer có một số thông tin tuyệt vời.

Tài liệu tham khảo Tôi đã xác nhận rằng cho đến nay sử dụng stdole.dll (chương trình có lẽ nhiều văn phòng cũng)

  • Văn phòng

  • Excel

  • Lõi

  • Báo cáo tinh thể (Cảm ơn Lithium. Như Nick đã chỉ ra, bạn có thể không hav e lợi thế của việc đặt Embed Interop Types=true)

Nếu bạn tìm thấy nhiều hơn, hãy thêm chúng vào danh sách này hoặc ghi chú trong phần nhận xét và tôi sẽ làm.

Hans Passantcũng không khuyến khích thiết Embed Interop Types=false đây: What's the difference setting Embed Interop Types true and false in Visual Studio?

Scott Hanselman cũng nói về những gì "Nhúng Interop loại" thực hiện ở đây: http://www.hanselman.com/blog/CLRAndDLRAndBCLOhMyWhirlwindTourAroundNET4AndVisualStudio2010Beta1.aspx

+2

Xin chào, cảm ơn câu trả lời. Bạn có thể thêm Crystal Reports dlls vào danh sách tài liệu tham khảo sử dụng stdole.dll – Lithium

2

Trong trường hợp của tôi, tôi phát hiện ra rằng Toggling Copy bất động sản địa phương lắp ráp mà phụ thuộc vào stdole.dll, tiết kiệm dự án và sau đó toggling tài sản trở lại giá trị ban đầu của nó, và cuối cùng lưu dự án một lần nữa giải quyết vấn đề. Thuộc tính này cũng có thể liên quan đến thuộc tính Embed Interop Types cho những người khác có vấn đề này.

Điều này làm rõ ràng là lưu thuộc tính Sao chép nội bộ sang tệp .xxproj. Nếu không, trạng thái của thuộc tính này không có trong tệp dự án và mặc định được giả định. Tôi không có giải thích tại sao điều này hoạt động như sự hiện diện của tài sản trong tập tin dự án không thay đổi giá trị hiển thị trong Visual Studio cũng không gây ra một sự thay đổi trong hội đồng thực sự được xuất bản hay không. Tôi cũng không gây ra thay đổi trong các thuộc tính này từ các giá trị được hiển thị ban đầu của chúng sau khi chuyển đổi chúng qua lại.

Tôi lưu ý rằng ngay cả trước khi tôi tìm thấy cách chữa trị, tôi thấy rằng việc làm sạch dự án và xây dựng lại nó đã không khiến stdole.dll được sao chép vào thùng rác. Chỉ sau khi xuất bản, stdole.dll xuất hiện.

+0

Thông tin tốt. Bây giờ bạn có tôi tự hỏi nếu tôi loại bỏ một tham chiếu đã được đặt thành 'Sao chép địa phương' và tham chiếu tôi thêm lại không. –

+0

Bản năng của bạn là chính xác về "Nhúng Loại Interop". Tôi đã tìm thấy vấn đề và cập nhật câu trả lời của mình. –

8

Tôi đã giải quyết vấn đề này ở mọi lứa tuổi.

Bất cứ khi nào tôi cài đặt bất kỳ thứ gì từ nền tảng web hoặc bất kỳ cập nhật nào, stdole.dll đều được thay thế bằng phiên bản không được ký. Tôi đã báo cáo lỗi cho Microsoft một lúc trước nhưng lại rơi vào tai điếc.

Tôi chuyển đến C: \ Program Files (x86) \ Microsoft.NET \ Primary Interop Assemblies và sao chép phiên bản đã ký (22kb) từ đây và thay thế phiên bản trong C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Visual Studio Tools cho Office \ PIA \ Common (16kb) và giải quyết vấn đề.

Scott

+0

Scott, tôi tìm thấy một cách để làm điều này mà không rối tung xung quanh với stdole.dll nữa. Chỉ cần cập nhật câu trả lời của tôi. Vẫn bình chọn bạn vì bạn đã cho tôi một cách giải quyết khác. –

18

Như những người khác chỉ ra, stdole.dll là một Interop hội tiểu học cho một loạt các thành phần interop Văn phòng COM. Bạn có thể xác định lý do tại sao nó được đưa vào dự án của bạn bằng cách làm như sau.

Trong Visual Studio, hãy truy cập Tools > Options > Projects and Solutions > Build and Run. Thay đổi cài đặt "độ dài đầu ra xây dựng dự án MSBuild" thành Detailed. Bây giờ làm sạch và xây dựng lại dự án của bạn.

Mở cửa sổ Đầu ra và tìm kiếm stdole. Bạn sẽ tìm thấy một phần như sau:

25> Dependency "stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". 
25>  Resolved file path is "D:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Common\stdole.dll". 
25>  Reference found at search path location "{Registry:Software\Microsoft\.NETFramework,v4.0,AssemblyFoldersEx}". 
25>   For SearchPath "D:\Git\FoobarServices\Dependencies\Dependencies". 
25>   Considered "D:\Git\FoobarServices\Dependencies\stdole.winmd", but it didn't exist. 
25>   Considered "D:\Git\FoobarServices\Dependencies\stdole.dll", but it didn't exist. 
25>   Considered "D:\Git\FoobarServices\Dependencies\stdole.exe", but it didn't exist. 
25>   For SearchPath "{CandidateAssemblyFiles}". 
25>   Considered "Dependencies\CrystalDecisions.CrystalReports.Engine.dll", but its name "CrystalDecisions.CrystalReports.Engine" didn't match. 
25>   Considered "Dependencies\CrystalDecisions.Enterprise.Framework.dll", but its name "CrystalDecisions.Enterprise.Framework" didn't match. 
25>   Considered "Dependencies\CrystalDecisions.Enterprise.InfoStore.dll", but its name "CrystalDecisions.Enterprise.InfoStore" didn't match. 
25>   Considered "Dependencies\CrystalDecisions.ReportSource.dll", but its name "CrystalDecisions.ReportSource" didn't match. 
25>   Considered "Dependencies\CrystalDecisions.Shared.dll", but its name "CrystalDecisions.Shared" didn't match. 
25>   Considered "Dependencies\CrystalDecisions.Web.dll", but its name "CrystalDecisions.Web" didn't match. 
25>   For SearchPath "{TargetFrameworkDirectory}". 
25>   Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\stdole.winmd", but it didn't exist. 
25>   Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\stdole.dll", but it didn't exist. 
25>   Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\stdole.exe", but it didn't exist. 
25>   For SearchPath "{Registry:Software\Microsoft\.NETFramework,v4.0,AssemblyFoldersEx}". 
25>   Considered AssemblyFoldersEx locations. 
25>  Required by "CrystalDecisions.Web, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, processorArchitecture=MSIL". 
25>  Required by "CrystalDecisions.ReportSource, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, processorArchitecture=MSIL". 
25>  Required by "CrystalDecisions.CrystalReports.Engine, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, processorArchitecture=MSIL". 
25>  Required by "CrystalDecisions.Enterprise.InfoStore, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304". 
25>  The ImageRuntimeVersion for this reference is "v1.0.3705". 

Bạn có thể thấy nơi Visual Studio tìm kiếm hội đồng cũng như những gì yêu cầu ở phía dưới. Trong trường hợp của tôi, đó là một loạt các tập hợp Crystal Reports cũ.

Đôi khi bạn có thể nhúng các loại interop thông qua các phụ thuộc như Tony gợi ý, nhưng không phải lúc nào. Đối với tôi, hội đồng Crystal Reports không hỗ trợ điều này.

Tôi đã khắc phục vấn đề này (bằng cách sao chép stdole.dll (32KB, chữ ký số) từ C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\ vào thư mục "Phụ thuộc" bên trong dự án của tôi. Tôi đã thêm tệp vào dự án của mình và thêm một tham chiếu rõ ràng vào nó (Thêm Tham chiếu> Duyệt).Cuối cùng, tôi đã mở thuộc tính của tham chiếu mới và đặt Embed Interop Types thành True.

Điều này có vẻ là một tình huống tốt hơn. Tôi không cần phải lo lắng về việc nhận được một phiên bản chưa ký của hội đồng.

+0

Thông tin tốt, Nick. Tôi sẽ tham khảo câu trả lời của bạn trong câu trả lời của tôi về việc tìm kiếm các lớp học tham khảo dll. –

+0

Nếu bạn đặt 'Nhúng Interop Types' thành' True', vẫn còn cần stdole.dll không? Ứng dụng của tôi không còn cần nó nữa. –

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