每次我必须将一个文件作为链接链接到 ASP.NET 项目中时,我总会忘记做一些事情,因为 Visual Studio 的错误太多,而且对这些很烦。它有一个错误/限制,因此它不会将文件复制到 Debug 输出文件夹中,我们必须更改文件的属性,以便它也被复制到 Publish 输出文件夹中。
经过大量研究,我以艰难的方式学到了这一点,并创建了一个 AfterBuild 目标来帮助简化此过程。但是,添加文件时仍有一些手动工作要做。
这是我维护的项目的示例。假设我们要在 ASP.NET 项目的“utilities”文件夹中添加文件 YIUCARD。
1) 右键单击 Visual Studio 上的“utilities”文件夹,然后选择“Add -> Existing item”。
2) 选择要添加的文件,单击一次(不要双击)。
3) 单击“添加”按钮旁边的箭头,然后选择“添加为链接”。
目前,这将无济于事。该文件不会被复制到任何文件夹(调试和发布)。它只是添加到项目中。
4) 右键单击文件并打开属性。
5) 更改:“构建操作”为“内容”“复制到输出目录”为“始终复制”</p>
此时,文件将被复制到发布输出文件夹(我们在发布时定义的任何位置)。但是,当我们在本地调试时(F5),它不会工作,因为该文件没有复制到代码库上的本地“实用程序”文件夹中。
6) 在 Visual Studio 上保存更改,选择“全部保存”。这是为了保存“.csproj”文件,因为我们对其进行了更改,现在我们将手动编辑它。
7)在记事本++中打开“.csproj”。
8)将文件添加到“BeforeBuild”事件(这是我的):
<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)我有一个发布模式的“AfterBuild”事件,它会自动为我发布项目,以便文件直接进入我想要的输出文件夹:
<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) 将文件保存在 Notepad++ 中并在 Visual Studio 中重新加载。
当您构建项目时,该文件将被复制到 Debug 和 Release/Publish 文件夹中!
但是,我想知道是否有任何更简单/直观的方法可以做到这一点。
您可能会说,可以通过将 Debug 输出文件夹更改为与 Release/Publish 文件夹相同的方式来解决此问题,以便在我第一次发布后文件就在那里。但是,请注意,这也有一个错误。如果我使用“bin\”以外的输出文件夹,aspx 文件会抱怨找不到程序集。即使我将“复制到输出目录”设置为“始终复制”,它也会抱怨找不到“Global.asax.cs”。
请查看以下相关问题:
解析器错误消息:无法加载类型“TestMvcApplication.MvcApplication”
“无法加载类型 [Namespace].Global”让我很伤心
这在较新版本的 Visual Studio 中是否已修复/改进?