Tôi đang cố gắng biên dịch addin excel của mình bằng C # 4.0 và bắt đầu gặp vấn đề này khi xây dựng dự án của mình trong Visual Studio. Điều quan trọng là nói với bạn rằng tôi chưa gặp vấn đề này trước đây. Điều gì có thể gây ra điều này xảy ra?
Tôi đang cố gắng biên dịch addin excel của mình bằng C # 4.0 và bắt đầu gặp vấn đề này khi xây dựng dự án của mình trong Visual Studio. Điều quan trọng là nói với bạn rằng tôi chưa gặp vấn đề này trước đây. Điều gì có thể gây ra điều này xảy ra?
Câu trả lời:
Tôi đoán là bạn không làm việc với các hội đồng được đặt tên mạnh mẽ. Tôi đã gặp lỗi này khi hai dự án tham chiếu các phiên bản hơi khác nhau của cùng một tổ hợp và một dự án phụ thuộc hơn tham chiếu các dự án này. Độ phân giải trong trường hợp của tôi là xóa thông tin khóa và phiên bản khỏi tên tập hợp trong các tệp .csproj (dù sao nó cũng không quan trọng), và sau đó thực hiện một bản dựng sạch.
Các thay đổi giữa các phiên bản lắp ráp khác nhau tương thích với các phần của giải pháp đề cập đến chúng. Nếu đây không phải là trường hợp của bạn, bạn có thể phải thực hiện thêm một số công việc để giải quyết vấn đề.
Với NuGet, thật dễ dàng để vào tình huống này nếu:
Điều này dẫn đến hai dự án trong giải pháp của bạn tham chiếu các phiên bản khác nhau của các gói đó. Nếu một trong số họ tham chiếu cái khác và là ứng dụng ClickOnce, bạn sẽ thấy vấn đề này.
Để khắc phục điều này, hãy đưa ra update-package [package name]
lệnh tại Bảng điều khiển Trình quản lý gói Nuget để đưa mọi thứ lên một sân chơi bình đẳng, tại thời điểm đó, sự cố sẽ biến mất.
Bạn nên quản lý các gói NuGet ở cấp độ giải pháp thay vì ở cấp dự án trừ khi có lý do thuyết phục không. Quản lý gói cấp độ giải pháp tránh tiềm năng của nhiều phiên bản phụ thuộc. Khi sử dụng UI quản lý, nếu tab Hợp nhất hiển thị 1 hoặc nhiều gói có nhiều phiên bản, hãy xem xét hợp nhất chúng thành một.
Khi gặp sự cố này, tôi đã khắc phục bằng cách tắt 'Bật cài đặt bảo mật ClickOnce'.
Menu: Dự án | 'Tên dự án' Thuộc tính ... | Tab bảo mật | Hộp kiểm 'Kích hoạt cài đặt bảo mật ClickOnce'.
Xem câu trả lời này .
Chuyển đến trang xuất bản và nhấp vào "Tệp ứng dụng". Từ đó bạn sẽ thấy một danh sách các DLL của bạn. Đảm bảo rằng những người gây rắc rối cho bạn có Trạng thái xuất bản được đánh dấu là "Bao gồm" thay vì "Điều kiện tiên quyết".
Nếu bạn đã thay đổi phiên bản lắp ráp của mình hoặc sao chép một phiên bản khác của thư viện được quản lý được nêu trong lỗi, bạn cũng có thể đã biên dịch các tệp tham chiếu phiên bản sai trước đó. Một 'Xây dựng lại tất cả' (hoặc xóa các thư mục 'bin và' obj 'của bạn như đã đề cập trong một nhận xét trước đó) sẽ khắc phục trường hợp này.
bạn cần ký tên vào hội đồng với một phím. Đi vào thuộc tính dự án dưới ký tab:
Thêm giải pháp của tôi cho vấn đề này cho bất cứ ai nó có thể giúp đỡ.
Tôi đã có một giải pháp ClickOnce ném lỗi này. Ứng dụng đã tham chiếu một thư mục "Libs" chung và chứa tham chiếu dự án đến a Foo.dll
. Mặc dù không có dự án nào trong giải pháp tham chiếu bản sao tĩnh của Foo.dll
thư mục "Libs", một số tham chiếu trong thư mục đó đã làm (ví dụ: giải pháp của tôi có Libs\Bar.dll
tham chiếu đến tham chiếu Foo.dll
.) Vì ứng dụng CO đã rút tất cả các phụ thuộc từLibs
cũng như sự phụ thuộc của họ, cả hai bản sao đã đi vào dự án. Điều này đã tạo ra lỗi ở trên.
Tôi đã khắc phục sự cố bằng cách chuyển Libs\Foo.dll
phiên bản tĩnh của mình sang thư mục con , Libs\Fix\Foo.dll
. Thay đổi này làm cho ứng dụng ClickOnce chỉ sử dụng phiên bản dự án của DLL và lỗi đã biến mất.
Xóa DLL (nơi xảy ra lỗi) và xây dựng lại giải pháp đã khắc phục sự cố của tôi. Cảm ơn
Nếu bạn đã thử tất cả các câu trả lời khác trong câu hỏi này và bạn:
... bạn có thể có các phiên bản riêng biệt của gói NuGet DLL trong Tài liệu tham khảo của dự án của bạn, vì tham chiếu được tạo bởi Intellisense / ReSharper sẽ là một tham chiếu "bình thường" và không phải là tham chiếu NuGet như mong đợi, vì vậy quá trình cập nhật NuGet đã thắng ' Tìm hoặc cập nhật nó!
Để khắc phục điều này, hãy xóa tham chiếu trong Dự án A, sau đó sử dụng NuGet để cài đặt nó và đảm bảo các gói NuGet trong tất cả các dự án là cùng một phiên bản. (như giải thích trong câu trả lời này )
Vấn đề này có thể xuất hiện bất cứ khi nào ReSharper / Intellisense gợi ý để thêm một tham chiếu cho dự án của bạn. Nó có thể phức tạp sâu sắc hơn nhiều so với ví dụ trên, với nhiều dự án và phụ thuộc đan xen làm cho nó khó theo dõi. Nếu tham chiếu được đề xuất bởi ReSharper / Intellisense thực sự là từ gói NuGet, hãy sử dụng NuGet để cài đặt nó.
Có quá nhiều dự án trong giải pháp của tôi phải trải qua và cập nhật riêng lẻ nên tôi đã sửa nó bằng cách:
Tôi đã gặp phải vấn đề này sau khi di chuyển một Addin Excel từ gói.config sang PackageReference. Có vẻ như có liên quan đến vấn đề này .
Các cách sau hoạt động như một cách giải quyết khác nếu bạn không sử dụng ClickOnce (nó sẽ bỏ qua tất cả thông tin phụ thuộc từ .manifest
tệp):
Tìm phần trông như thế này:
<!-- Include additional build rules for an Office application add-in. -->
<Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
Chỉnh sửa một bản sao được đổi tên của .targets
tệp được tham chiếu (trong trường hợp của tôi, tệp đã được giải quyết C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets
và tôi đã tạo một bản sao Microsoft.VisualStudio.Tools.Office_FIX.targets
trong cùng một thư mục - không kiểm tra xem nó có hoạt động từ một thư mục khác không).
Tìm GenerateApplicationManifest
phần tử và thay đổi thuộc tính của nó Dependencies="@(DependenciesForGam)"
thành Dependencies=""
.
Thay đổi phần tìm thấy trong 2. để tham chiếu .targets
tệp đã chỉnh sửa của bạn thay vào đó.
Điều này sẽ phải được lặp lại bất cứ khi nào phiên bản của .targets
tệp được gửi cùng với VS được cập nhật (hoặc bạn sẽ không nhận được các bản cập nhật), nhưng tôi hy vọng nó sẽ được khắc phục sớm ...
Là lắp ráp của bạn được ký hợp lệ?
Để kiểm tra điều này, nhấn Alt + Enter trên dự án của bạn (hoặc nhấp chuột phải, sau đó chọn Thuộc tính). Chuyển đến "Ký". Xác minh rằng hộp kiểm "Đăng ký lắp ráp" đã được chọn và tệp khóa tên mạnh được chọn và "Chỉ ký hiệu trễ" không được chọn .
Bây giờ đây là một cách tiếp cận khác nhau cho vấn đề:
Nhấp chuột phải vào dự án và chọn tùy chọn 'Unload Project'. Bạn sẽ nhận thấy dự án của bạn trở nên không có sẵn.
Nhấp chuột phải vào dự án không có sẵn và chọn tùy chọn 'Chỉnh sửa'.
Cuộn xuống thẻ '<Itemgroup>' chứa tất cả các thẻ tài nguyên.
Bây giờ đi đến tham chiếu đã được hiển thị trên danh sách lỗi, bạn sẽ nhận thấy nó sử dụng một thẻ duy nhất (tức là < Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / >
).
Thay đổi đó để trông như sau:
.
<Reference Include="assemble_name_here, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >
< Private > True < / Private >
< HintPath > path_here\assemble_name_here.dll < / HintPath >
< / Reference >
Nếu dự án chính của bạn sử dụng một số dự án thư viện và có tham chiếu đến chúng, bạn có thể gây ra sự cố này nếu dự án của bạn tham chiếu đến tệp dll lắp ráp thay vì dự án thư viện khi bạn thay đổi một cái gì đó trong dự án thư viện của bạn (ví dụ: đổi tên một lớp).
Bạn có thể kiểm tra tất cả các tham chiếu đến dự án chính của mình bằng cách xem trong cửa sổ Trình duyệt đối tượng (menu Xem-> Trình duyệt đối tượng). Tham chiếu đến tệp dll luôn có số phiên bản. Ví dụ: TestLib [1.0.0.0]
Giải pháp: xóa tham chiếu hiện tại của dự án chính của bạn vào dự án thư viện và thêm tham chiếu vào dự án thư viện đó.
Sau khi thử hầu hết các giải pháp ở đây, cuối cùng tôi chỉ cần thêm một tham chiếu đến dự án từ dự án nhấp một lần, điều này đã thay đổi nó thành Bao gồm (Tự động) từ Bao gồm và cuối cùng nó đã hoạt động.
Điều giúp tôi là tôi đã vào Gói quản lý giải pháp và xem xét gói đã cài đặt gây ra sự cố. Tôi thấy rằng một số dự án đã tham khảo cùng một gói nhưng các phiên bản khác nhau. Tôi căn chỉnh chúng dựa trên nhu cầu của tôi và nó đã làm việc.
Tôi đã có điều này trong một giải pháp với 6 dự án. Một trong những dự án của tôi đã đề cập đến hội đồng có tên là một tài liệu tham khảo. Những người khác đều chỉ vào tài liệu tham khảo dự án.
Tôi thường nhận được một lỗi khác nhau trong những trường hợp này.
Giải pháp của tôi là xóa hội đồng có tên bất cứ nơi nào nó được tham chiếu và thêm lại. Khi tôi làm việc thông qua dự án, vấn đề đã biến mất. Trước khi làm điều này, tôi đã thử làm sạch giải pháp cũng như đảm bảo không có dự án nào được ký kết.
hy vọng nó sẽ giúp được ai đó ...
Nếu nó không khớp với các phụ thuộc phụ thuộc, hãy chuyển đến trình quản lý gói NuGet ở cấp độ giải pháp và kiểm tra các tab Cập nhật và Hợp nhất, hài hòa tất cả.
Gần đây tôi gặp vấn đề này. Trong trường hợp của tôi, tôi có các gói NuGet trên các cụm khác nhau. Những gì tôi có là các phiên bản khác nhau của cùng một gói NuGet được liên kết với các hội đồng của riêng tôi.
Giải pháp của tôi là sử dụng trình quản lý gói NuGet trên Giải pháp, trái ngược với các dự án riêng lẻ. Điều này cho phép tùy chọn "hợp nhất", trong đó bạn có thể nâng cấp các gói NuGet của mình qua bao nhiêu dự án mà bạn muốn - vì vậy tất cả chúng đều tham chiếu cùng một phiên bản lắp ráp. Khi tôi thực hiện hợp nhất, thất bại xây dựng biến mất.
Hãy thử với gói cập nhật -reinstall -ignoredependencies
bin
vàobj
thư mục của dự án của bạn và xây dựng lại dự án. Đôi khi điều này hoạt động.