2013-09-23 43 views
22

每次我必須將文件鏈接到ASP.NET項目中作爲鏈接時,總會有一些我忘記做的事,因爲Visual Studio太麻煩了,很煩人用這些。 它存在一個錯誤/限制,因此它不會將文件複製到調試輸出文件夾中,我們必須更改文件的屬性,以便將它複製到發佈輸出文件夾中。在Visual Studio中添加文件作爲鏈接 - 調試與發佈

經過大量的研究,我學到了這一點,並且創建了一個AfterBuild目標來幫助簡化這個過程。但是,添加文件時仍需要做一些手動工作。

這是我維護的項目的示例。假設我們要在ASP.NET項目的「utilities」文件夾中添加文件YIUCARD。

1)右鍵單擊Visual Studio上的「utilities」文件夾,然後選擇「Add - > Existing item」。

Step 1

2)選擇要添加的文件,點擊它一次(不要雙擊)。

Step 2

3)單擊旁邊的箭頭「添加」按鈕,然後選擇「添加鏈接」。

Step 3

目前,這不會做任何事情。該文件不會被複制到任何文件夾(調試和發佈)。它只是添加到項目中。

4)右鍵單擊文件並打開屬性。

Step 4

5)變化: 「建設行動」,以「內容」 「複製到輸出目錄」爲「始終複製」

Step 5

此時,該文件將被複制到發佈輸出文件夾(我們在發佈時定義的任何地方)。 但是,當我們在本地調試(F5)時,它不會工作,因爲該文件未被複制到代碼庫上的本地「實用程序」文件夾中。

6)通過選擇「全部保存」在Visual Studio中保存更改。這是爲了保存「.csproj」文件,因爲我們對其進行了更改,現在我們將手動編輯它。

Step 6

7)在記事本中打開「的.csproj」 ++。

Step 7

8)的文件添加到 「BeforeBuild」 事件(這裏是我的):

Step 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上。

Step 10

當您生成項目,該文件將被複制到Debug和Release /發佈文件夾!

不過,我想知道是否有這樣做的任何容易/直觀的方式。

您可能會說這將通過將Debug輸出文件夾更改爲與Release/Publish文件夾相同來解決,以便在第一次發佈後這些文件就會存在。 但是,請注意,這也有一個錯誤。如果我使用「bin \」以外的輸出文件夾,則aspx文件會抱怨他們找不到組件。即使我將「複製到輸出目錄」設置爲「始終複製」,它也會抱怨找不到「Global.asax.cs」。

請參閱以下相關問題:

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

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

這是固定/在Visual Studio的新版本改進?

回答

0

如果目標是包括內容的文件夾(例如腳本,圖像),那麼你不應該管理單個文件。相反,將這些文件夾包含在構建和發佈文件中。

當文件需要被添加/刪除,只需在文件夾中的內容更新它們。這實際上是我們處理幫助文件的方式,因爲它們不是由開發人員管理的。

請查看以下鏈接:

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

嗨基思。這不是我正在描述的問題,但謝謝你的提示:) – Nuno

4

MSBuild.WebApplication.CopyContentLinkedFiles的NuGet可以幫助你。該包添加了一個MSBuild目標,該目標將構建期間添加爲鏈接的所有內容文件複製到Web應用程序文件夾。

+0

是的 - 我有同樣的問題,404錯誤的「添加爲鏈接」的CSS文件(不要問爲什麼 - 1 sln,3網頁項目,4個相同的css文件),這個nuget包解決了這個問題,只是花花公子。 –

0

我認爲最好的方法之一是做一個符號鏈接,如你所願。 管理始終必須相同的文件對您有幫助。

相關問題