每次我在ASP.NET项目中链接一个文件时,总会有一些事情我忘记做,这是因为Visual Studio对此非常有bug并且很恼人。它存在一个错误/限制,导致它不会将文件复制到Debug输出文件夹中,我们必须更改文件的属性,以便将其复制到发布输出文件夹中。
我通过很多研究才学会了这个方法,并创建了一个AfterBuild目标来帮助简化此过程。然而,在添加文件时仍需要一些手动工作。
以下是我维护的一个项目的示例。假设我们要将文件YIUCARD添加到ASP.NET项目的“utilities”文件夹中。
1)右键单击Visual Studio中的“utilities”文件夹,选择“添加->现有项目”。
2)选择要添加的文件,单击一次(不要双击)。
3)单击“添加”按钮旁边的箭头,选择“链接添加”。
此时,这将无效。该文件将不会复制到任何文件夹(Debug和Publish)。 它只是被添加到项目中。
4)右键单击文件并打开“属性”。
5)更改:“生成操作”为“内容”,“复制到输出目录”为“始终复制”。
此时,该文件将复制到发布输出文件夹中(在发布时定义的任何位置)。然而,当我们在本地调试(F5)时,它不起作用,因为该文件未复制到代码库上的本地“utilities”文件夹中。
6)通过选择“全部保存”在Visual Studio上保存更改。这样,“.csproj”文件才会被保存,因为我们对它进行了更改,现在将手动编辑它。
7)在Notepad++中打开“.csproj”。
8)将文件添加到“BeforeBuild”事件中(这是我的)。
我通过很多研究才学会了这个方法,并创建了一个AfterBuild目标来帮助简化此过程。然而,在添加文件时仍需要一些手动工作。
以下是我维护的一个项目的示例。假设我们要将文件YIUCARD添加到ASP.NET项目的“utilities”文件夹中。
1)右键单击Visual Studio中的“utilities”文件夹,选择“添加->现有项目”。
2)选择要添加的文件,单击一次(不要双击)。
3)单击“添加”按钮旁边的箭头,选择“链接添加”。
此时,这将无效。该文件将不会复制到任何文件夹(Debug和Publish)。 它只是被添加到项目中。
4)右键单击文件并打开“属性”。
5)更改:“生成操作”为“内容”,“复制到输出目录”为“始终复制”。
此时,该文件将复制到发布输出文件夹中(在发布时定义的任何位置)。然而,当我们在本地调试(F5)时,它不起作用,因为该文件未复制到代码库上的本地“utilities”文件夹中。
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文件夹相同,可以解决此问题,以便在第一次发布后文件会出现在那里。 但是,请注意,这也存在一个错误。如果我使用除“bin\”以外的输出文件夹,aspx文件将抱怨找不到程序集。即使我将“复制到输出目录”设置为“始终复制”,它也会抱怨找不到“Global.asax.cs”。
请参阅以下相关问题:
解析器错误消息:无法加载类型 'TestMvcApplication.MvcApplication'
"Could not load type [Namespace].Global" causing me grief
在Visual Studio的新版本中是否已经修复或改进了这个问题?