45

每次我必须将一个文件作为链接链接到 ASP.NET 项目中时,我总会忘记做一些事情,因为 Visual Studio 的错误太多,而且对这些很烦。它有一个错误/限制,因此它不会将文件复制到 Debug 输出文件夹中,我们必须更改文件的属性,以便它也被复制到 Publish 输出文件夹中。

经过大量研究,我以艰难的方式学到了这一点,并创建了一个 AfterBuild 目标来帮助简化此过程。但是,添加文件时仍有一些手动工作要做。

这是我维护的项目的示例。假设我们要在 ASP.NET 项目的“utilities”文件夹中添加文件 YIUCARD。

1) 右键单击​​ Visual Studio 上的“utilities”文件夹,然后选择“Add -> Existing item”。

步骤1

2) 选择要添加的文件,单击一次(不要双击)。

第2步

3) 单击“添加”按钮旁边的箭头,然后选择“添加为链接”。

第 3 步

目前,这将无济于事。该文件不会被复制到任何文件夹(调试和发布)。它只是添加到项目中。

4) 右键单击​​文件并打开属性。

第4步

5) 更改:“构建操作”为“内容”“复制到输出目录”为“始终复制”</p>

第 5 步

此时,文件将被复制到发布输出文件夹(我们在发布时定义的任何位置)。但是,当我们在本地调试时(F5),它不会工作,因为该文件没有复制到代码库上的本地“实用程序”文件夹中。

6) 在 Visual Studio 上保存更改,选择“全部保存”。这是为了保存“.csproj”文件,因为我们对其进行了更改,现在我们将手动编辑它。

第 6 步

7)在记事本++中打开“.csproj”。

第 7 步

8)将文件添加到“BeforeBuild”事件(这是我的):

第 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)我有一个发布模式的“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 中重新加载。

第 10 步

当您构建项目时,该文件将被复制到 Debug 和 Release/Publish 文件夹中!

但是,我想知道是否有任何更简单/直观的方法可以做到这一点。

您可能会说,可以通过将 Debug 输出文件夹更改为与 Release/Publish 文件夹相同的方式来解决此问题,以便在我第一次发布后文件就在那里。但是,请注意,这也有一个错误。如果我使用“bin\”以外的输出文件夹,aspx 文件会抱怨找不到程序集。即使我将“复制到输出目录”设置为“始终复制”,它也会抱怨找不到“Global.asax.cs”。

请查看以下相关问题:

解析器错误消息:无法加载类型“TestMvcApplication.MvcApplication”

“无法加载类型 [Namespace].Global”让我很伤心

这在较新版本的 Visual Studio 中是否已修复/改进?

4

3 回答 3

17

MSBuild.WebApplication.CopyContentLinkedFiles NuGet 可能会对您有所帮助。此包添加了一个 MSBuild 目标,该目标将在构建过程中作为链接添加的所有内容文件复制到 Web 应用程序文件夹。

于 2016-02-23T14:32:06.507 回答
0

如果目标是包含内容文件夹(例如脚本、图像),那么您不应该管理单个文件。相反,将这些文件夹包含在您的构建和发布文件中。

当需要添加/删除文件时,只需在内容文件夹中更新它们。这本质上就是我们处理帮助文件的方式,因为它们不是由开发人员管理的。

查看这些链接:

有没有办法自动将内容文件包含到 asp.net 项目文件中?

使用 Visual Studio 进行 ASP.NET Web 部署:部署额外文件

于 2014-10-02T14:15:21.737 回答
0

我认为最好的方法之一是根据需要创建符号链接。这将有助于您管理始终必须相同的文件。

于 2016-12-08T00:43:27.853 回答