惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - 黃偉榮

IoC的中繼器:CommonServiceLocator UTF8Encoding與BOM Temporary Post Used For Theme Detection (d4b0aefa-c88e-4957-bba7-b367d1bfa042 - 3bfe001a-32de-4114-a6b4-4005b770f6d7) 寫CodedUI時如何尋找控制項的小技巧 Visual Studio 2010 Feature Packs 2之Silverlight自動化測試 Moles - Isolation framework for .NET(假.Net)介紹 [小技巧]Entity Framework強型別Include C#仿Oracle Decode,將ValueType對應成String - 黃偉榮 - 博客园 Visual Studio 單元測試的3種Initialize與Cleanup jQuery套件-檢查頁面的欄位是否有變更 用EventLogReader查詢特殊EventLog jQuery自製Plugin-Bind事件函式時檢查有沒有Bind過 ASP.NET MVC TempData使用心得 Visual Stuiod 自訂檔案比較合并工具 [小技巧]自動化測試時NLog的訊息輸出到測試結果中 小技巧:專案切換32與64位元組件 Linq小技巧:日期處理 Unit Test小技巧 : DateTime的Stub 解決TFS Build Asp.Net Mvc開啟MvcBuildViews後無法載入組件問題
Web Project的檔案共用小技巧
黃偉榮 · 2011-01-30 · via 博客园 - 黃偉榮

有時Web Project會有一些檔案在不同專案間共同使用,如Javascript檔、圖檔、第三方套件等等,如果每一個專案都放置一份,很容易照成維護上的麻煩(如修改A專案的檔案,忘了複製到B專案),這時可以調整一下檔案的結構與修改一下專案的設定來解決這問題(這是小弟最近建方案的心得,不一定是最好的)。

資料夾結構

可以在方案下建立一個方案內專案共用的資料夾,專門放置通用的檔案。

image

通用檔案的版本管理

通用檔案可以放在方案下,簽出簽入以方案內為主,但缺點是檔案的用共只能分享在方案中的專案間,其實可以將共用檔案存放在一個版本管理的特定路徑下,在用工具做同步,如:

  • SVN的 svn:externals
  • TFS的 工具區設定多資料夾

等方式將方案所需的檔案放在方案資料夾中。

假設在TFS或SVN中以下列方式建立,shared(通用資料夾)是平行於方案的。

image

在SVN中在Checkout的方案資料夾上增加svn:externals屬性,讓工具簽出方案時一並簽出Shared資料夾,並修改後可簽入。

image

在TFS中工作區增加Shared的Map,讓工具簽出方案時一並簽出Shared資料夾,並修改後可簽入。

image

以Add As Link方式新增檔案

在各專案中以Add As Link的方式將檔案加入通用檔案(以Add As Link加入專案的檔案的圖示會多一個連結符號),當修改時是修改同一份檔案,並可以簽入讓所有方案都使用最新的檔案。

image

如範例的二個專案中的JS是共用小弟寫多年的檔案,因為都是修改同一份,不會因為複製到不同專案中,因為修改而造成版本的混亂。

image

NOTE:

VSCommands 2010有提供,Copy Link與Paste Link的功能,可以減少一點點的操作。

修改專案檔

Web Project的MS Build預設設定是不複製Link Content到專案中,這樣就以Link加入專案就會出現問題,因為當按下F5執行時,是無法正常執行的,因為找不到檔案,所以要修改MS Build的設定,當發生編譯時,複製檔案到連結檔案的所在。

在*.csproj檔中增加下_CopyWebApplication Target

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!--增加_CopyWebApplication的Target,因為一個Target只能存在一個地方,所以除了增加自己的設定外,也要包含原始設定-->
    <Target Name="_CopyWebApplication" DependsOnTargets="$(_CopyWebApplicationDependsOn)">
        <Copy SourceFiles="@(Content)" Condition=" '$(IsDesktopBuild)' != 'false'  And '%(Content.Link)' != ''  " 
              DestinationFiles="$(ProjectDir)%(Content.Link)" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
        <CallTarget Condition=" '!$(Disable_CopyWebApplication)' And '$(OutDir)' != '$(OutputPath)' And '$(OnAfter_CopyWebApplication)' != ''" 
                    Targets="$(OnAfter_CopyWebApplication)" RunEachTargetSeparately="true" />
    </Target>
</Project>

NOTE:

此方法僅適用Web Project,不適用Web Site。

實行結果

這方式在小弟的專案實行一陣子了,用起來沒什麼問題,我們的開發環境是

Visual Studio 2010

Visual Studio TFS 2010

本機的Build、TFS的Build、Publish都還沒發現問題,有興趣的朋友可以試試看。

參考資料

svn:externals說明

HOW TO:加入現有項目至專案

MSBuild Target