上下文:我目前正在研究一個VB.NET多項目模板,它們之間有交叉引用,這幾乎可以工作。Visual Studio多項目模板:項目參考問題
問題: VS用於生成的每個項目產生新的GUID並更新到新的.sln和每一個新的.vbproj但永遠不會更新項目引用到.vbproj以同樣的方式。
這裏是一個.vbproj例如:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProductVersion>
</ProductVersion>
<SchemaVersion>
</SchemaVersion>
<ProjectGuid>{_NewGUIDGeneratedByVS_}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Template.DataModel</RootNamespace>
<AssemblyName>Template.DataModel</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Windows</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
</PropertyGroup>
...並進一步在另一個生成.vbproj它指的是以前的項目:
<ProjectReference Include="..\Template.DataModel\Template.DataModel.vbproj">
<Project>{_OldBoringGUID_}</Project>
<Name>Template.DataModel</Name>
</ProjectReference>
一些端倪:我已經嘗試過通過我的IWizard
Root和Child派生類中的replacementsDictionary
強制執行特定的GUID替換,但VS不斷替換舊的GUID:
在這裏,$Sguid6$
標籤將被VS忽略,並將被替換爲新的閃亮GUID!
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{$Sguid6$}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>$safeprojectname$.My.MyApplication</StartupObject> <RootNamespace>$safeprojectname$</RootNamespace>
<AssemblyName>$safeprojectname$</AssemblyName>
接着又在另一個.vbproj:在$Sguid6$
將採取GUID我告訴他對我的replacementsDictionary
,符合市場預期。
<ProjectReference Include="..\$safeprojectname$.DataModel\$safeprojectname$.DataModel.vbproj">
<Project>{$Sguid6$}</Project>
<Name>$safeprojectname$.DataModel</Name>
<Private>True</Private>
</ProjectReference>
問:我怎麼能告訴VS正確地掉所有這些GUID,或至少不改變他們?