2015-09-17 17 views
5

Tôi đang sử dụng phiên bản Core.Data.SQLite Core: 1.0.98.1 gói nuget với Visual Studio 2015. Khi tôi xây dựng dự án của mình có tham chiếu gói System.Data.SQLite của tôi, nó sao chép hai thư mục (x86 và x64), mỗi thư mục chứa một tệp SQLite.Interop.dll vào thư mục đầu ra. Tuy nhiên khi tôi xây dựng dự án thử nghiệm của tôi hoặc bất kỳ dự án nào khác tham khảo dự án đã đề cập trước đó, các thư mục này không được sao chép vào thư mục đầu ra của dự án mẹ và tôi nhận được một DllNotFoundException trên tệp SQLite.Interop.dll.Các tệp SQLite.Interop.dll không sao chép dự án đường dẫn đầu ra khi được yêu cầu bởi dự án được tham chiếu

Lưu ý: đây là đặc biệt khi dự án tham khảo System.Data.SQLite được tham chiếu bởi một dự án khác

Trả lời

16

Các giải pháp được đề nghị như doumented here là tạo ra một System.Data.SQLite.Core.targets.user tại của bạn gói \ System.Data.SQLite.Core.1.0.98.1 \ xây dựng \ [phiên bản khuôn khổ của bạn ở đây] thư mục chứa

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<PropertyGroup> 
<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles> 
<CopySQLiteInteropFiles>false</CopySQLiteInteropFiles> 
<CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles> 
<CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles> 
</PropertyGroup> 
</Project> 

Nhưng nếu bạn không muốn thêm bất cứ điều gì trong thư mục gói của bạn để kiểm soát nguồn của bạn, bạn chỉ có thể thêm trực tiếp những điều sau đây vào tệp dự án của mình

<PropertyGroup> 
    <ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles> 
    <CopySQLiteInteropFiles>false</CopySQLiteInteropFiles> 
    <CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles> 
    <CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles> 
</PropertyGroup> 
+1

Các bản dựng cục bộ của tôi hoạt động tốt - CopySQLiteInteropFiles chạy và sao chép tệp vào OutDir trên máy của tôi. Nhưng việc xây dựng tương tự không thành công trong các thử nghiệm của tôi trên TeamCity - Dll không tìm thấy ngoại lệ trên các tệp Interop bị thiếu. Tạo thuộc tính CopySQLiteInteropFiles trong tệp proj của tôi là những gì đã làm việc để TeamCity sao chép các tệp interop qua. +1 –

+0

Giải pháp thứ hai làm việc tuyệt vời cho tôi. Không phải là khuyến cáo nghỉ ngay sau khi bạn nhận được một phiên bản mới nói từ nuget? – quarkonium

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