首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将文件添加为Visual Studio上的链接-调试与发布

将文件添加为Visual Studio上的链接-调试与发布
EN

Stack Overflow用户
提问于 2013-09-23 23:57:47
回答 3查看 37K关注 0票数 44

每次我必须将一个文件作为link链接到一个ASP.NET项目中时,总会有一些我忘记做的事情,因为Visual Studio在这些事情上太多buggy和烦人了。它有一个bug/限制,所以它不会将文件复制到Debug输出文件夹中,并且我们必须更改文件的属性,以便它也被复制到发布输出文件夹中。

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

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

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

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

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

目前,这不会起到任何作用。该文件不会被复制到任何文件夹(调试和发布)。它刚刚被添加到项目中。

4)在文件中单击鼠标右键,然后打开属性。

5)修改:“Build Action”改为“Content”“Copy to Output Directory”改为“Copy always”

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

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

7)在Notepad++中打开.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文件夹相同的文件夹来解决此问题,这样在我第一次发布之后,这些文件就会出现在那里。但是,请注意,这也有一个bug。如果我使用的输出文件夹不是"bin\",aspx文件会报错说它们找不到程序集。即使我将"Copy to Output Directory“设置为"Copy Always",它也会报告找不到"Global.asax.cs”。

请查看以下相关问题:

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

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

在较新版本的Visual Studio?中是否修复/改进了此问题?

EN

回答 3

Stack Overflow用户

发布于 2016-02-23 22:32:07

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

票数 16
EN

Stack Overflow用户

发布于 2014-10-02 22:15:22

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

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

请查看以下链接:

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
EN

Stack Overflow用户

发布于 2016-12-08 08:43:28

我认为最好的方法之一就是做一个你想要的符号链接。这将有助于您管理必须始终相同的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18963750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档