2008-11-10 36 views
13

Trong dự án trang web Visual Studio (trong Visual Studio 2005 hoặc mới hơn, không phải dự án ứng dụng web nơi vẫn còn tệp .csproj) thông tin tham chiếu được lưu trữ như thế nào và có thể kiểm soát nguồn không lưu trữ các tệp nhị phân đã biên dịch trong điều khiển nguồn?Đường dẫn tham chiếu trang web Visual Studio

Nếu bạn nhấp chuột phải vào dự án trang web và chọn Trang thuộc tính, màn hình đầu tiên (Tham khảo) liệt kê tất cả các tham chiếu dự án.

Tham chiếu hệ thống * được liệt kê dưới dạng GAC và các tệp DLL khác có thể được liệt kê dưới dạng BIN hoặc Dự án.

Vấn đề xảy ra khi bạn có một cái gì đó như một tài liệu tham khảo dự án, và sau đó cam kết nó để kiểm soát nguồn (đối với chúng tôi, Subversion, bỏ qua .dll và các tập tin PDB.)

Một nhà phát triển được đang được cập nhật từ các kho lưu trữ và phải tự thiết lập tất cả các tài liệu tham khảo dự án này, nhưng tôi thậm chí không thể xác định nơi lưu trữ thông tin này, trừ khi nó nằm trong đó .suo, KHÔNG thân thiện với điều khiển nguồn.

Trả lời

18

Nếu bạn tham khảo một .dll bằng tên tệp thông qua tab duyệt, sẽ có tệp .refresh được tạo (được lồng trong dll trong BIN). Chúng tôi đặt chúng vào SVN và nó hoạt động tốt (bạn có thể phải chỉnh sửa chúng để sử dụng đường dẫn tương đối).

Tài liệu tham khảo được thêm từ tab .NET được thêm vào web.config

Tài liệu tham khảo dự án được lưu trữ trong tệp (.sln) giải pháp. Mở tệp .sln và bạn sẽ thấy chúng được liệt kê:

Project("{xxxxxxx-7377-xxxx-xxxx-BC803B73C61A}") = "XXXXXXX.Web", "XXXXXXX.Web", "{xxxxxxxx-BB14-xxxx-B3B6-8BF6D8BC5AFF}" 
    ProjectSection(WebsiteProperties) = preProject 
     TargetFramework = "3.5" 
     ProjectReferences = "{xxxxxxxx-C3AB-xxxx-BBED-2055287036E5}|XXXXXX.Data.dll; 
      ... 
+0

Cảm ơn người đàn ông! Tôi luôn luôn có một vấn đề với các tài liệu tham khảo dự án và không nhận thấy tập tin sln đang thay đổi khi tôi thêm tham chiếu dự án. –

0

Tôi sử dụng copyprojectDll.ps1 powershell.

cấu trúc thư mục của tôi là dưới

  • ClassLibraries
    Bên thứ ba
    Website/Bin
    CopyprojectDll.ps1
    Website.sln

ClassLibraries là lớp mã cho dự án của tôi, Dal. Dự án trang web chỉ bao gồm các tệp web, aspx, aspx.cs .. ThirdParty là các thư viện bắt buộc, AjaxToolkit, v.v.

Tôi biên dịch ClassLibraries.sln Tôi chạy CopyprojectDll.ps1 Tôi sử dụng Website.sln sau này.

Tệp quyền hạn mẫu dưới đây.

$ folders = @(); $ thư mục + = "IB.Security" $ thư mục + = "ClassLibraries/Core.Classes"

chức năng CopyDllsToWebBin ($ dll_files) { if ($ dll_files -eq $ null) { trở lại; } $ targetfolder = "./ Kod/bin/"

foreach($dll in $dll_files) 
{ 

    copy-item $dll.FullName -destination "$targetfolder" -force #-Verbose 
} 

}

chức năng CopyDllsToThirdParty ($ dll_files) {

$ targetfolder =" ./ThirdParty/"

foreach($dll in $dll_files) 
{ 
    copy-item $dll.FullName -destination "$targetfolder" -force #-Verbose 
} 

}

$ dll_output_folder = "/ bin/debug";

foreach ($ thư mục trong $ thư mục) { $ dll_files = Get-ChildItem -Path $ thư mục $ dll_output_folder -include * .dll -Recurse | đối tượng sắp xếp Tên CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path $ folder $ dll_output_folder -include * .pdb -Recurse | đối tượng sắp xếp Tên CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path $ folder $ dll_output_folder -include * .xml -Recurse | loại đối tượng Tên CopyDllsToWebBin ($ dll_files) "sao chép thư mục $ $ dll_output_folder"

}

$ dll_files = Get-ChildItem -Path "Bên thứ ba" -gồm * .dll -recurse | loại đối tượng Tên CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path "ThirdParty" -bao gồm * .pdb -Recurse | đối tượng sắp xếp Tên CopyDllsToWebBin ($ dll_files) $ dll_files = Get-ChildItem -Path $ folder $ dll_output_folder -include * .xml -Recurse | loại đối tượng Tên CopyDllsToWebBin ($ dll_files)

"sao chép Bên thứ ba"

ngày

16

“trang web” dự án trong Visual Studio là một điều kỳ lạ. Họ dường như là một nỗ lực để phục vụ cho các nhà phát triển web truyền thống, nơi một "trang web" chỉ là một tập hợp các tệp trong một thư mục. Trong cùng một cách, khi bạn thực hiện một dự án "Web Site" trong Visual Studio, không có tệp "dự án" thực, như các dự án C# có tệp .csproj. Tuy nhiên, vẫn còn một tệp giải pháp (.sln). Thông thường, tham chiếu assembly được lưu trong tệp dự án. Vì một trang web không có trang web, chúng sẽ đi đâu?

Tài liệu tham khảo cho các dự án khác

Nếu bạn thêm một tham chiếu đến một dự án khác, sau đó một mục được thực hiện trong các giải pháp sln tập tin. Nó kết thúc lên tim như thế này:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebSite1", "..\..\WebSites\WebSite1\", "{F25DB9D6-810D-4C18-ACBB-BFC420D33B20}" 
ProjectSection(WebsiteProperties) = preProject 
TargetFramework = "3.5" 
ProjectReferences = "{11666201-E9E8-4F5A-A7AB-93D90F3AD9DC}|ClassLibrary1.dll;" 

File System References

Nếu bạn duyệt hệ thống tập tin và thêm một tập tin .dll, sau đó Visual Studio sẽ tạo ra một “.refresh” tập tin với cùng trong thư mục \ Bin. Tệp này chỉ là tệp văn bản 1 dòng cho biết đường dẫn tệp đã được tải. Vì vậy, ví dụ nếu tôi thêm "MyAssem.dll" từ .... \ libs, sau đó trong thư mục Web Site \ Bin, tôi sẽ kết thúc với 2 tệp được sao chép ở đó: MyAssem.dll và MyAssem.dll.refresh. Tệp .refresh sẽ chứa văn bản: “.... \ libs”. Tại mỗi bản dựng, Visual Studio sẽ kiểm tra đường dẫn trong tệp .refresh và nếu một tệp .dll mới tồn tại ở đó, nó sẽ ghi đè lên một trong thư mục Bin.

Cảnh báo: Visual Studio sẽ KHÔNG phát ra lỗi nếu tệp không tồn tại ở nơi tệp .refresh yêu cầu nó xem xét. Nó sẽ chỉ tiếp tục sử dụng .dll đã có trong thư mục \ Bin. Tuy nhiên nó sẽ xuất ra một Warning.

GAC Tham khảo

Nếu bạn thêm một assembly từ Global Assembly Cache, Visual Studio sẽ nhập nó vào file Web.config như sau:

<compilation debug="false"> 
<assemblies> 
    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 

Again thứ bạn cần xem ở đây là Visual Studio giả định rằng nếu hội đồng nằm trong GAC trên máy tính phát triển của bạn, thì nó sẽ ở cùng một nơi trong thời gian chạy! Điều đó có thể khiến bạn gặp rắc rối nếu bạn có thể đã cài đặt Oracle.DataAccess trên máy tính của mình, điều này sẽ được đặt trong GAC, nhưng khi bạn triển khai, bạn chỉ cần sao chép .dll vào vị trí trên máy sản xuất. Nó vẫn sẽ cố gắng tìm nó trong GAC và có thể thất bại trong thời gian chạy.

Tôi hy vọng điều này sẽ giúp làm sáng tỏ những điểm kỳ quặc của các trang web và cách tham chiếu hoạt động!

+0

Bài đăng trên blog rất hữu ích về chủ đề này. Cảm ơn. –

+0

Rất tiếc, liên kết dường như không còn hoạt động nữa. – lgaud

+0

@lgaud: Rất tiếc, tôi đã vô hiệu hoá dịch vụ lưu trữ của tôi rằng điều này đã được đăng vào sáng nay. Tôi đã làm một bản sao của nó ở đâu đó mặc dù ... Nếu tôi có thể tìm thấy nó, tôi sẽ cập nhật câu trả lời của tôi với toàn văn thay vì một liên kết. – CodingWithSpike

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