2013-09-23 31 views
22

Mỗi lần tôi phải liên kết một tệp vào một dự án ASP.NET dưới dạng liên kết, luôn có điều tôi quên làm, vì Visual Studio quá yếu và gây phiền toái với những cái này. Có một lỗi/giới hạn với nó để nó không sao chép tệp vào thư mục đầu ra Gỡ lỗi và chúng tôi phải thay đổi thuộc tính của tệp sao cho nó cũng được sao chép vào thư mục Xuất bản xuất bản.Thêm tệp dưới dạng liên kết trên Visual Studio - Gỡ lỗi và xuất bản

Tôi đã học được điều này một cách khó khăn, sau nhiều nghiên cứu và tôi đã tạo mục tiêu AfterBuild để giúp quá trình này dễ dàng hơn. Tuy nhiên, vẫn còn một số công việc thủ công cần làm khi thêm tệp.

Dưới đây là ví dụ về dự án tôi duy trì. Giả sử chúng ta muốn thêm tệp YIUCARD vào thư mục “tiện ích” của dự án ASP.NET.

1) Nhấp chuột phải vào thư mục "tiện ích" trên Visual Studio và chọn "Thêm -> Mục hiện tại".

Step 1

2) Chọn tập tin để thêm, nhấp vào nó một lần (không nhấp đúp).

Step 2

3) Nhấp chuột vào mũi tên bên cạnh nút “Add” và chọn “Thêm Như Link”.

Step 3

Hiện tại, việc này sẽ không làm gì cả. Tệp sẽ không được sao chép vào bất kỳ thư mục nào (Gỡ lỗi và Xuất bản). Nó chỉ được thêm vào dự án.

4) Nhấp chuột phải vào tệp và mở Thuộc tính.

Step 4

5) Thay đổi: “Xây dựng hành động” để “Nội dung” “Sao chép vào Output Directory” để “Copy luôn”

Step 5

Tại thời điểm này, các tập tin sẽ được sao chép vào thư mục Xuất bản xuất bản (bất kỳ nơi nào chúng tôi xác định khi xuất bản). Tuy nhiên, khi chúng tôi gỡ lỗi cục bộ (F5), nó sẽ không hoạt động vì tệp không được sao chép vào thư mục "tiện ích" cục bộ trên cơ sở mã.

6) Lưu thay đổi trên Visual Studio, bằng cách chọn "Lưu tất cả". Điều này là để tệp “.csproj” được lưu, vì chúng tôi đã thực hiện các thay đổi trên tệp và giờ đây chúng tôi sẽ chỉnh sửa tệp theo cách thủ công.

Step 6

7) Mở ".csproj" trong Notepad ++.

Step 7

8) Thêm tập tin vào sự kiện "BeforeBuild" (ở đây là của tôi):

Step 8

<Target Name="BeforeBuild"> 
    <ItemGroup> 
     <UtilitiesFiles Include="..\path\to\file\REDOPXX.NEW" /> 
     <UtilitiesFiles Include="..\path\to\file\REDFMTST" /> 
     <UtilitiesFiles Include="..\path\to\file\JOBCARD" /> 
     <UtilitiesFiles Include="..\path\to\file\YIUCARD" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(UtilitiesFiles)" DestinationFolder=".\utilities" SkipUnchangedFiles="true" /> 
    </Target> 

9) Tôi có một "AfterBuild" sự kiện cho chế độ Release rằng tự động xuất bản dự án cho tôi, để các tệp chuyển thẳng đến thư mục đầu ra mà tôi muốn:

<Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release' "> 
    <PropertyGroup> 
     <OutputDir>..\path\to\publish\MyProject</OutputDir> 
    </PropertyGroup> 
    <Message Importance="High" Text="Output DIR: $(OutputDir)" /> 
    <RemoveDir Directories="$(OutputDir)" ContinueOnError="true" /> 
    <MSBuild Projects="MyProject.csproj" Properties="Configuration=$(Configuration);WebProjectOutputDir=$(OutputDir);OutDir=$(OutputDir)bin\" Targets="ResolveReferences;_CopyWebApplication" /> 
    </Target> 

10) Lưu tệp trong Notepad ++ và tải lại nó trên Visual Studio.

Step 10

Khi bạn xây dựng dự án, các file sẽ được sao chép vào cả Debug và Release/Xuất bản thư mục!

Tuy nhiên, tôi muốn biết liệu có cách nào dễ dàng hơn/trực quan hơn để thực hiện việc này hay không.

Bạn có thể nói rằng điều này sẽ được sửa bằng cách thay đổi thư mục đầu ra Gỡ lỗi giống như thư mục Phát hành/Xuất bản để các tệp sẽ có sau lần đầu tiên tôi xuất bản. Tuy nhiên, xin lưu ý rằng có một lỗi với điều này, là tốt. Nếu tôi sử dụng một thư mục đầu ra khác với "bin \", tập tin aspx sẽ phàn nàn rằng họ không thể tìm thấy các hội đồng. Ngay cả khi tôi đặt "Copy to Output Directory" thành "Copy Always", nó sẽ không thể tìm thấy "Global.asax.cs".

Hãy xem những câu hỏi liên quan:

Parser Error Message: Could not load type 'TestMvcApplication.MvcApplication'

"Could not load type [Namespace].Global" causing me grief

Đây có phải là cố định/cải thiện trong các phiên bản mới hơn của Visual Studio?

Trả lời

0

Nếu mục tiêu là bao gồm các thư mục nội dung (ví dụ: tập lệnh, hình ảnh), thì bạn không nên quản lý các tệp riêng lẻ. Thay vào đó, hãy bao gồm các thư mục này trong tệp xây dựng và xuất bản của bạn.

Khi tệp cần được thêm/xóa, chỉ cần cập nhật chúng trong thư mục nội dung. Về cơ bản, đây là cách chúng tôi xử lý các tệp Trợ giúp vì chúng không được các nhà phát triển quản lý.

Kiểm tra những liên kết này:

Is there a way to automatically include content files into asp.net project file?

ASP.NET Web Deployment using Visual Studio: Deploying Extra Files

+0

Hi Keith.Đó không phải là vấn đề tôi mô tả, nhưng cảm ơn cho mẹo anyway :) – Nuno

4

Các MSBuild.WebApplication.CopyContentLinkedFiles NuGet thể giúp bạn. Gói này thêm một mục tiêu MSBuild sao chép tất cả các tệp nội dung được thêm dưới dạng liên kết đến thư mục Ứng dụng Web trong khi xây dựng.

+0

Đúng - Tôi đã gặp vấn đề tương tự, với lỗi 404 cho tệp "css được thêm dưới dạng liên kết" (không hỏi tại sao - 1 sln, 3 web dự án, 4 tệp css giống hệt nhau) và gói nuget này đã giải quyết vấn đề chỉ là dandy. –

0

Tôi nghĩ một trong những cách tốt nhất là tạo liên kết tượng trưng như bạn muốn. Sẽ rất hữu ích nếu bạn quản lý tệp luôn phải giống nhau.

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