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".
2) Chọn tập tin để thêm, nhấp vào nó một lần (không nhấp đúp).
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”.
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.
5) Thay đổi: “Xây dựng hành động” để “Nội dung” “Sao chép vào Output Directory” để “Copy luôn”
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.
7) Mở ".csproj" trong Notepad ++.
8) Thêm tập tin vào sự kiện "BeforeBuild" (ở đây là của tôi):
<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.
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?
Hi Keith.Đó không phải là vấn đề tôi mô tả, nhưng cảm ơn cho mẹo anyway :) – Nuno