上下文:我目前正在研究一个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,或至少不改变他们?