我有兩個項目和解決方案文件:MSBuild的進口和壓倒一切的文件
c:\dev\base\proja\proja.vbproj
c:\dev\base\proja\myfile1.aspx
c:\dev\base\proja\myfile1.aspx.vb
c:\dev\base\proja\myfile1.aspx.vb.designer
c:\dev\base\proja\myfile2.aspx
c:\dev\base\proja\myfile2.aspx.vb
c:\dev\base\proja\myfile2.aspx.vb.designer
和
c:\dev\base\projb\mysln.sln
c:\dev\base\projb\projb.vbproj
c:\dev\base\projb\myfile2.aspx
c:\dev\base\projb\myfile2.aspx.vb
c:\dev\base\projb\myfile2.aspx.vb.designer
proja.vbproj
是基礎項目,而projb.vbproj
旨在導入proja.vbproj
和覆蓋myfile2.aspx etc
文件。
proja.vbproj
看起來是這樣的:
[...]
<Compile Include="myfile1.aspx.vb">
<SubType>ASPXCodebehind</SubType>
<DependentUpon>myfile1.aspx</DependentUpon>
</Compile>
<Compile Include="myfile2.aspx.vb">
<SubType>ASPXCodebehind</SubType>
<DependentUpon>myfile2.aspx</DependentUpon>
</Compile>
[...]
<Content Include="myfile1.aspx" />
<Content Include="myfile2.aspx" />
[...]
而projb.vbproj
看起來是這樣的:
[...]
<Import Project="$(ProjectDir)..\proja\proja.vbproj" />
[...]
<Compile Include="myfile2.aspx.vb">
<SubType>ASPXCodebehind</SubType>
<DependentUpon>myfile2.aspx</DependentUpon>
</Compile>
[...]
<Content Include="myfile2.aspx" />
[...]
projb.vbproj
是一款專僅僅覆蓋的proja.vbproj
自定義的文件 - 從中提供一個標準化的位置維護項目,同時允許針對每個站點定製的特定覆蓋。
當我在Visual Studio 2013中加載projb.vbproj
並嘗試構建它時,問題就出現了。它會拋出大量錯誤,因爲它無法解析位於proja.vbproj
中的myfile1.aspx
和相關文件的位置。這似乎是因爲導入的路徑相對於projb.vbproj
位置而不是proja.vbproj
文件位置。
我試過預附加$(MSBuildProjectDirectory)
的所有文件中proja.vbproj
- 但我相信$(MSBuildProjectDirectory)
是基於被打開,而不是導入項目上下文集,這並不解決問題。
我不想整個myproja.vbproj
文件的內容複製到myprojb.vbproj
只覆蓋一個文件 - 這似乎是混亂和對抗的MSBuild看似繼承爲中心的方法,但也許我錯了這裏...
有什麼辦法可以完成我之後的工作?那是;用一個項目的文件位置覆蓋某個項目的某些文件位置,而不必複製整個項目文件?
感謝您的答覆。實際上,我試過'$(MsBuildThisFileDirectory)',並且Visual Studio 2013在導入項目時仍然不能很好地播放。如果我在另一個項目中需要一個項目中的文件(我的項目之間的差異通常是針對500個文件「基礎」項目的一個或兩個文件) - 我應該創建導入正確文件而不是嘗試繼承的獨特項目這似乎不起作用)?最佳做法是什麼? – Yumbelie
'最佳實踐'高度依賴於情況,但請參閱我的編輯:也許最後一個項目適合您。 – stijn
這可能會奏效,非常感謝 – Yumbelie