我正在尝试为我的团队编写一些自定义项目模板,这样我们就可以在为应用程序创建新模块时保持一致,同时也可以更轻松地创建新模块。我主要使用它,但我在添加项目引用时遇到问题。
我的目标是这样的项目结构:
/Root
/Modules
/ModuleName
/ModuleName.Interface
/ModuleName.ViewModels
/ModuleName.Views
ModuleName项目具有对所有这些项目的项目引用,ModuleName.Views项目具有对ModuleName.Interface和ModuleName.ViewModels项目的引用。所以我设置了所有vstemplate文件,所有项目都正确生成,除了项目引用。
我在模块的主要vstemplate中定义了这个:
<TemplateContent>
<ProjectCollection>
<ProjectTemplateLink ProjectName="$safeprojectname$.Interface">Module.Interface\Module.Interface.vstemplate</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$">Module\Module.vstemplate</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.ViewModels">Module.ViewModels\Module.ViewModels.vstemplate</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.Views">Module.Views\Module.Views.vstemplate</ProjectTemplateLink>
</ProjectCollection>
</TemplateContent>
我在Module.Views.vstemplate文件中定义了这个:
<Project File="Module.Views.csproj" TargetFileName="$safeprojectname$.Views.csproj" ReplaceParameters="true">
<ProjectItem TargetFileName="packages.config" ReplaceParameters="false">packages.config</ProjectItem>
<ProjectItem TargetFileName="assemblyinfo.cs" ReplaceParameters="true">properties\assemblyinfo.cs</ProjectItem>
</Project>
然后我在Module.Views.csproj文件中定义了这个:
<ItemGroup>
<ProjectReference Include="..\$safeprojectname$.Interface\$safeprojectname$.Interface.csproj">
<Project>{4f6aa0f2-a984-43c3-8fad-7e2f00351f7e}</Project>
<Name>$safeprojectname$.Interface</Name>
</ProjectReference>
<ProjectReference Include="..\$safeprojectname$.ViewModels\$safeprojectname$.ViewModels.csproj">
<Project>{e5a562f9-58b2-4ab5-bb9d-8dc806322e62}</Project>
<Name>$safeprojectname$.ViewModels</Name>
</ProjectReference>
</ItemGroup>
它正确地命名了所有项目,但我的项目引用最终如下:
ModuleName.Views.Interface
ModuleName.Views.ViewModels
$ safeprojectname $宏在vstemplate和csproj文件中的应用看起来有点不同。似乎在处理vstemplate文件时,$ safeprojectname $是您在IDE提示时输入的项目的名称,但是在csproj文件中,$ safeprojectname $是特定于该vstemplate的扩展项目名称,例如, ModuleName.Views当我期待它是ModuleName。
我尝试使用CustomParameters,但它们似乎推迟到最后一分钟,例如:
<CustomParameters>
<CustomParameter Name="$ModuleInterfaceProjectName$" Value="$safeprojectname$.Interface"/>
<CustomParameter Name="$ModuleProjectName$" Value="$safeprojectname$"/>
<CustomParameter Name="$ModuleViewModelsProjectName$" Value="$safeprojectname$.ViewModels"/>
<CustomParameter Name="$ModuleViewsProjectName$" Value="$safeprojectname$.Views"/>
</CustomParameters>
这导致对ModuleName.Views.Interface的相同引用。
有谁知道如何解决这种行为?我知道我可以写一个自定义向导来解决这个问题,但我希望不要那么远。