Thư mục Giải pháp Visual Studio như Thư mục thực


119

Tôi có Giải pháp Visual Studio. Hiện tại, nó là một giải pháp trống (= không có dự án) và tôi đã thêm một vài thư mục giải pháp.

Thư mục Giải pháp dường như chỉ là "thư mục ảo", vì chúng không thực sự được tạo trong Hệ thống tệp và các tệp bên trong thư mục giải pháp chỉ nằm trong cùng một thư mục với tệp .sln.

Có cài đặt nào mà tôi đã bỏ qua yêu cầu Visual Studio coi Thư mục Giải pháp là thư mục "thực", nghĩa là tạo chúng trong hệ thống tệp và di chuyển tệp vào đó khi tôi di chuyển chúng bên trong giải pháp vào một trong những thư mục đó không?

Chỉnh sửa: Cảm ơn. Sẽ đưa ra đề xuất cho VS2010 sau đó :)


52
Đây là một trong những điều kỳ quặc khó chịu nhất của Visual Studio
Andy White

Làm thế nào tôi có thể đối phó một cách chính xác với vấn đề này?
hellboy

Điều thú vị là, loại Rider có tính năng này (nhưng thư mục phải ở cùng đường dẫn với tệp .sln và tham chiếu thư mục thực tế không được lưu trữ trong chính tệp .sln
rsenna

Tôi đang sử dụng VS 2017 và theo như tôi có thể nói, MS vẫn chưa thêm tính năng cho phép thêm toàn bộ thư mục vào thư mục giải pháp - phải thêm từng tệp riêng lẻ.
Theo

Câu trả lời:


43

Không có cài đặt đặc biệt. Tôi không nghĩ rằng nó được hỗ trợ.

Bạn có thể tạo thư mục thực trong một "dự án" trong giải pháp, nhưng không phải trong chính giải pháp.


1
Điều này dường như vẫn chính xác kể từ VS 2017.
Theo

2
... và VS 2019
whymatter

một trong những điều tồi tệ nhất về VS. Tại sao MS không giữ các thư mục Sln như một tùy chọn, nhưng CŨNG cho phép các thư mục THỰC được thêm vào giải pháp. Rất khó chịu. Hệ thống Tệp hoạt động, tại sao phải phát minh lại bánh xe (dưới dạng hình vuông).
MemeDeveloper

46

một cách giải quyết, mà thực sự hoạt động như mong đợi .

  1. Thêm một trang web mới hoặc hiện có vào giải pháp. (Tôi thường tạo một cái mới.)
  2. Chỉ cần đảm bảo rằng nó được tạo bên trong thư mục giải pháp của bạn. (Đôi khi tôi thậm chí còn tạo một "liên kết" đến một thư mục bên ngoài, ví dụ: "Tài liệu" hoặc "Tiếp thị" trên mạng chia sẻ. Trong trường hợp đó, Git tất nhiên sẽ bỏ qua.)
  3. Đảm bảo đi tới cài đặt "Dự án" hoặc Trình quản lý cấu hình để loại trừ "Trang web" này khỏi Xây dựng và Triển khai !

Làm xong. Bây giờ Solution Explorer sẽ phản ánh bất kỳ thay đổi nào trong hệ thống tệp và ngược lại (bao gồm cả các thư mục con).

Tôi (bỏ lỡ) sử dụng nó cho các thông số kỹ thuật, tài liệu, PM và một số tập lệnh DevOps được chia sẻ trong nhóm. Thật dễ dàng để lựa chọn, những gì cần đưa vào kiểm soát nguồn hay không và (nếu được thiết lập đúng cách) nó không xung đột với bản dựng.

Tôi biết tính năng này không dành cho trường hợp sử dụng đó, nhưng ngoại trừ biểu tượng "Dự án" có thể gây hiểu lầm, tôi không tìm thấy bất kỳ thiếu sót nào đối với bản hack đó. Và vẫn có những trường hợp sử dụng trong đó các Thư mục Giải pháp (ảo) cổ điển mà VS cung cấp, phù hợp với hình ảnh. Bạn nghĩ sao?


4
Dưới đây là hướng dẫn đầy đủ: Nhấp chuột phải vào giải pháp -> "Thêm" -> "Trang web mới ..." -> (Tôi đã chọn "Trang web trống ASP.NET"). Sau khi thay đổi vị trí, đừng quên thêm "\ MyName" vào đường dẫn, nếu không, nhấp vào "OK" sẽ chỉ mở lại hộp thoại. Sau đó nhấp chuột phải vào giải pháp của bạn -> "Thuộc tính" -> "Thuộc tính cấu hình" -> bỏ chọn "Xây dựng" cho dự án web.
user764754 28/12/16

Cái này vẫn hoạt động chứ? sử dụng VS2015 nhưng nó không hoạt động.
Jan Paolo Đi

Trong VS2017 hoàn toàn tạo một thư mục thực nhưng biểu tượng WebSite (vòng tròn tối) hiển thị trong Trình khám phá giải pháp. Có ai biết cách khắc phục điều đó không?
Andrei Karcheuski

Có, nó hoạt động trong VS2019, nhưng vẫn không theo dõi các thay đổi của hệ thống tệp. Bạn phải thỉnh thoảng "Làm mới" để xem các tệp hiện tại. Giá như các dự án C # không phải là loại giải pháp duy nhất hỗ trợ .*projđịnh dạng dựa trên toàn cầu hệ thống tệp mới, sạch hơn và rõ ràng hơn .
shannon

32

Trong Visual Studio 2017, nhấp vào biểu tượng "Giải pháp và Thư mục" trong cửa sổ Giải pháp Explorer. Nút này chuyển đổi từ chế độ xem "giải pháp" ảo thành "chế độ xem nguồn" phù hợp với bố cục của các thư mục và tệp trên hệ thống tệp. Khi bạn thêm một thư mục mới, thư mục được tạo về mặt vật lý ở vị trí mong đợi. giải pháp và thư mục.


Điều này rất hữu ích nhưng trên "chế độ xem nguồn", bạn đã mất tất cả các phím tắt nhấp chuột phải vào một dự án, tức là "Quản lý các gói NuGet".
David Liang

1
Tại sao chỉ các giải pháp hoặc dự án C ++ lại hoạt động khác so với các ngôn ngữ khác?
Thân thiện với Ghost

Điều này đã giúp tôi, vì vậy tôi đã tạo một thư mục trong chế độ xem thư mục mà tôi muốn, sau đó tôi thêm một thư mục giải pháp và thêm dự án dưới dạng con của thư mục. Không thực sự có ý nghĩa với tôi, nhưng câu trả lời này đã giúp tôi hiểu được
hanzolo 11/09/18

Đây chính xác là những gì tôi muốn. Cảm ơn!
user1633272

10

Câu trả lời được chọn cho thấy có thể sử dụng các dự án thực tế thay vì các thư mục giải pháp, nhưng không thực sự giải thích cách làm. Tôi đoán những gì tôi đang mô tả ở đây có thể là cách ít khó xử nhất để đạt được điều đó ... :-P

Vấn đề với các tệp dự án thông thường là cuối cùng chúng sẽ được biên dịch bởi MSBUILD. Và nếu bạn muốn có một dự án chỉ chứa các tệp không thể biên dịch, đó sẽ là một vấn đề.

Nhưng một thời gian trước Visual Studio đã giới thiệu một loại dự án mới: Dự án được chia sẻ (phần mở rộng .shproj). Loại dự án này không được biên dịch theo mặc định, nhưng chỉ khi (và chỉ khi) nó được tham chiếu bởi một dự án khác.

Vì vậy, một phần của mẹo ở đây là sử dụng các dự án được chia sẻ thay vì các thư mục giải pháp . Rõ ràng là có thể thêm một dự án được chia sẻ mà không bao giờ được tham chiếu bởi bất kỳ dự án nào khác, có nghĩa là chúng ta có thể tránh được vấn đề được trình bày ở trên.

Sau đó, bằng cách sử dụng <None Include="**/*" />mệnh đề trong tệp .shproj, chúng tôi có thể làm cho nó tự động phản ánh bất kỳ tệp và / hoặc thư mục con mới nào.

Vì vậy, về cơ bản hãy làm điều này:

  • Tạo một thư mục mới trong giải pháp của bạn.
  • Thêm tệp .shproj mới vào thư mục gốc của thư mục mới này.
  • Tham khảo .shproj mới trong giải pháp của bạn.

Ví dụ, trong trường hợp của tôi, tôi đã tạo DockerDev.shproj, vì vậy tôi có thể nhóm một số tập lệnh liên quan đến docker mà chúng tôi chỉ chạy trong các máy phát triển của mình:

<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="**/*" />
  </ItemGroup>
</Project>

Tệp .shproj này sẽ theo dõi bất kỳ tệp nào , trong bất kỳ thư mục con nào của DockerDevthư mục mới này trong giải pháp của tôi.

Theo những gì tôi có thể thấy, giải pháp này hoạt động khá giống những gì OP yêu cầu: nó sẽ hoạt động như một tham chiếu không thể biên dịch cho một thư mục và nó sẽ tự động phản ánh bất kỳ thay đổi nào được thực hiện đối với nó.


Theo kinh nghiệm của tôi, điều này sẽ tích lũy ngay khi một thành viên trong nhóm không nghi ngờ chạm vào bất kỳ thuộc tính tệp nào; sau đó bạn có các tệp trùng lặp xuất hiện trong ngăn điều hướng. Trong một số điều kiện, mọi tệp kết thúc được liệt kê trong tệp .proj và sau đó sự xấu xí xảy ra. Mặc dù tôi không thích từ bỏ, nhưng tôi vẫn thích cách tiếp cận 'Thêm trang web hiện có'.
shannon

@shannon Tôi chưa bao giờ trải nghiệm hành vi mà bạn đang đề cập, nhưng "thiếu bằng chứng không phải là bằng chứng vắng mặt", vì vậy có điều đó. Nhưng tôi sử dụng các dự án được chia sẻ hàng ngày, vì vậy tôi nghĩ rằng điều đó cũng có giá trị. Về dự án trang web (WSP), chúng cũng có thể hoạt động, tôi đoán là đã lâu tôi không sử dụng nó.
rsenna

8

Sara Ford đã đóng góp một Macro để thêm thực hiện việc này. Trong Visual Studio 2010, nếu bạn mở Macro Explorer, bạn sẽ thấy một macro có tên "GenerateSlnFolderOnDirStructure". Điều này sẽ tự động hóa việc tạo Thư mục giải pháp và thêm tệp.


5

Thư mục để Giải pháp Thư mục của Cecilia Wirén - CeciliaSHARP

Loại bỏ rắc rối khi thêm một số tệp vào thư mục giải pháp. Chỉ cần sử dụng menu ngữ cảnh cho giải pháp và ngay bên dưới tùy chọn tạo thư mục giải pháp mới, giờ đây bạn sẽ tìm thấy 'Thêm Thư mục làm Thư mục Giải pháp'. Thao tác này sẽ tạo một thư mục giải pháp có cùng tên như bạn đã chọn và thêm các mục bên trong thư mục đó vào thư mục giải pháp. Thao tác này sẽ không di chuyển các tệp trên đĩa.


3

Không, nó không được hỗ trợ. Như bạn đã nghi ngờ, các thư mục giải pháp chỉ đơn giản là các thư mục con ảo trong tệp .sln, không liên quan gì đến hệ thống tệp.


3

Visual studio không có hỗ trợ cho điều này. Mặc dù vậy, tôi đã tạo một tiện ích mở rộng tương tự cho VS2013. Nó ánh xạ các thư mục giải pháp đến các thư mục vật lý trên ổ cứng của bạn, mặc dù việc ánh xạ là một cách (từ ổ cứng đến giải pháp). Điều đó có nghĩa là nội dung của thư mục giải pháp sẽ phản ánh nội dung của thư mục ổ cứng chứ không phải theo cách khác.

Với điều đó, tiện ích mở rộng vẫn có thể hữu ích. Nó có hỗ trợ ánh xạ các thư mục giải pháp tới các thư mục vật lý, lọc các tệp và thư mục dựa trên regex và ghi nhớ các ánh xạ trong tệp .sln của bạn. Các thuộc tính không xâm nhập nên các nhà phát triển không có tiện ích mở rộng vẫn có thể mở sln và không bị ảnh hưởng.

Được lưu trữ trên thư viện studio trực quan: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd

Chỉnh sửa: Đã tải lên bitbucket. Bây giờ là mã nguồn mở. Giấy phép MIT. https://bitbucket.org/LSS_NorthWind/physical-solution-folders


3

Lưu ý: Có, bạn có thể tạo một thư mục trên thư mục gốc nhưng hơi phức tạp ...

Bằng cách nỗ lực thêm, bạn có thể làm được như thế nào? Hãy làm theo bước--

  • 1-Tạo Thư mục, ví dụ: "thư mục mới " trên gốc (nơi của bạn).
  • 2. Sao chép và dán các dự án của bạn vào bên trong thư mục.
  • 3. vào tệp sln của bạn và tìm các dự án đã chuyển và nối thư mục mới \ vào địa chỉ của dự án đã chuyển.
  • 4.Lưu tập tin sln.
  • 5.Mở dự án của bạn và Cam kết kho lưu trữ bằng git hoặc lâu hơn ...
  • 6. Đưa kho lưu trữ về vị trí mới.

    Bạn xong việc rồi...

nếu vẫn không thể thấy thư mục của bạn -----

  • 1.Thêm thư mục giải pháp xyz.
  • 2.Mở tệp sln và thay đổi tên thư mục đó bằng tên thư mục của bạn.

Chúc mừng bạn đã hoàn thành ..

Nếu bạn gặp bất kỳ vấn đề gì, hãy viết thư cho tôi để được giúp đỡ ..


3

Tạo "Thư mục giải pháp". Điều này sẽ tạo ra thư mục logic, nhưng không phải là thư mục vật lý. Nhấp chuột phải vào thư mục giải pháp và mở hộp thoại dự án mới. Nhưng trước khi nhấp vào OK, bạn phải thay đổi vị trí dự án thành thư mục vật lý mong muốn và VS sẽ tạo nó và đặt dự án vào bên trong.


1

Bạn có thể thêm các thư mục thực bằng cách chọn "Thêm bộ lọc mới" cho tệp dự án Visual Studio. Bạn cũng có thể thực hiện "Thêm bộ lọc mới" trong một thư mục hiện có. Sau khi thư mục được tạo, hãy đổi tên nó và thêm nguồn hoặc tệp tiêu đề hoặc bất kỳ tệp nào phù hợp với dự án của bạn. Đây là một cách mà tôi biết cho phép chúng tôi tạo các thư mục thực thông qua Visual Studio IDE.


Tính năng này dành riêng cho các dự án C ++.
Tamir Daniely

Giải pháp này cũng áp dụng cho VS Projects - câu hỏi là về các thư mục cấp Giải pháp.
Theo

0

Thư mục được tạo bên dưới giải pháp sẽ là ảo như đã nói. Có thể đây có thể được gọi là một giải pháp thay thế nhưng về mặt vật lý bạn có thể tạo thư mục trên đĩa trước hoặc khi bạn thêm mục / dự án mới và Robert nên là anh chị em của bố bạn.

ps- xem xét kỹ hơn có lẽ tôi nên giải thích "bob's your Uncle" có nghĩa là bạn tốt / được sắp xếp.


Có vấn đề gì nếu Robert là anh trai của mẹ bạn?
Darrel Lee

0

Bản thân tôi cũng muốn tính năng này một vài lần, nhưng vào cuối ngày, bạn thực sự KHÔNG muốn khả năng làm được điều này. Hãy coi Giải pháp của bạn (tệp) như là thư mục gốc của một ứng dụng web và coi các thư mục Giải pháp là Thư mục ảo (theo nghĩa đen và chức năng). Nội dung của một thư mục ảo web hoàn toàn có thể nằm trên một máy chủ khác. Nơi Visual Studio trộn lẫn khái niệm thư mục giải pháp là cho phép bạn tạo tệp mới bên trong thư mục. Bạn phải luôn "Thêm Hiện có" khi thêm nội dung. Khi bạn thêm hiện có, nó sẽ tạo liên kết đến vị trí nguồn của tệp.

Nhưng vì lý do bạn không muốn các thư mục giải pháp hoạt động như các thư mục "vật lý" là vì bố cục giải pháp của bạn có thể không nhất thiết phải sử dụng cùng một quy ước với bố cục điều khiển nguồn của bạn. Thư mục giải pháp cho phép bạn tùy chỉnh hệ thống phân cấp của các dự án của mình để bạn có thể nhóm các dự án và mục lại với nhau theo bất kỳ cách nào bạn thích, sau đó quyết định bạn không thích nó và thay đổi lại nó mà không phải trải qua cơn ác mộng của việc di chuyển các mục điều khiển nguồn xung quanh và gây khó chịu cho phần còn lại của nhóm của bạn.


1
Đây là câu trả lời đúng - tạo tệp trên đĩa trong một thư mục có cùng tên với thư mục ảo, sau đó thêm tệp vào VS bằng cách sử dụng 'Thêm hiện có'.
Richard

4
Họ có thể dễ dàng triển khai cả thư mục ảo và thư mục vật lý. Đó rõ ràng là một sự bỏ qua. Xem tham khảo: mọi IDE khác, từng có.
Tamir Daniely

6
Tôi không hiểu tại sao khái niệm Thư mục ảo (IIS) lại liên quan đến các thư mục giải pháp. Đối với đối số kiểm soát nguồn, tôi không thấy vấn đề. Tại sao việc di chuyển tệp lại gây khó chịu cho những người còn lại trong nhóm của bạn? Đó là một hoạt động phổ biến. Và tại sao bạn muốn bố cục của các tệp trong điều khiển nguồn khác với bố cục vật lý?
user247702

2
Thư mục giải pháp vật lý sẽ làm cho nó dễ dàng hơn (mặc dù chỉ là một chút) để tạo ra cấu trúc thư mục hiện đại như NancyFx của , nơi nhiều dự án rơi vào loại thích src, test, tools, vv Bạn muốn chắc chắn muốn đưa ra quyết định ngay từ đầu dự án đến thời điểm của bạn về gây khó chịu cho nhóm, nhưng điều đó đúng với hầu hết mọi quyết định về kiến ​​trúc.
Eric Eskildsen

3
-1 usecase của tôi là thế này: đôi khi chúng tôi chỉ muốn thêm một số tài liệu nhất định vào giải pháp. Chúng sẽ không được xây dựng, nhưng chúng được giữ trong phần kiểm soát nguồn. Chúng tôi thường có một thư mục đặc biệt cho chúng. Tôi muốn có thư mục đó trong giải pháp của mình - không phải các tệp trong đó, mà là chính thư mục đó. Có, có nhiều cách để vượt qua hạn chế này, nhưng chúng không phải là tối ưu. Có một tham chiếu thực tế đến một thư mục trong giải pháp sẽ hoạt động đơn giản.
rsenna

0

Tôi có một chút giải pháp cho điều này (nó không tuyệt vời, nhưng nó hoạt động).

  1. Tạo một thư mục trong giải pháp của bạn (tức là "Contoso")
  2. Nhấp chuột phải vào giải pháp và sau đó nhấp vào "Mở thư mục trong giải pháp Explorer"
  3. Tạo thư mục vật lý (tức là "Contoso") trong thư mục giải pháp
  4. Sao chép / Tạo tệp trong thư mục vật lý.
  5. Kéo các tệp vào thư mục ảo trong trình khám phá giải pháp.

Nó không tuyệt vời vì bạn sẽ cần phải duy trì thủ công các tham chiếu tệp, nhưng nó phù hợp với tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.