ソリューション テンプレート (モデル、データアクセス、およびサービス) に 3 つのプロジェクトがあります。そのうちの 1 つ以上が EF 5 を参照する必要があります。最初のテンプレート サービスを最初に作成したとき) EF.dll は参照リストにありましたが、黄色の "見つかりません」というアイコンが表示されます。次の XML を .vstemplate ファイルの末尾に配置すると、その問題が解決したことを読みました。
<WizardExtension>
<Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
<FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
</WizardExtension>
<WizardData>
<packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true">
<package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" />
</packages>
</WizardData>
次に、MultiProject .vstemplate を作成する方法を理解し、3 つの SubProjects のそれぞれが思い通りに作成されました。ただし、EF 5 を参照する各プロジェクトは、参照の接続に失敗しています。各サブ .vstemplate ファイルには上記の XML が含まれていますが、うまくいきません。その XML をルート .vstemplate に入れようとしても成功しませんでした。ここに私のルート .vstemplate があります:
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
<TemplateData>
<Name>CCISC WCF Service Template - Empty</Name>
<Description>This is the multi-project template for creating a WCF Service at the county that contains EF 5 and Elmah.</Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>MyService</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<Icon>__TemplateIcon.png</Icon>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<ProjectTemplateLink ProjectName="Model">Model\Model.vstemplate</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="DataAccess">DataAccess\DataAccess.vstemplate</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="Service">Service\Service.vstemplate</ProjectTemplateLink>
</ProjectCollection>
</TemplateContent>
</VSTemplate>
そして、これは Service.vstemplate ファイルだけです。それらは類似しているため、残りを提供する必要はありませんが、参照に関してはすべて同じ問題があります。
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData>
<Name>CCISC Service Template - Empty</Name>
<Description>This is the Service project for the CCISC WCF Service Template that contains EF 5 and Elmah.</Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>CCISC Service Template - Empty</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<Icon>__TemplateIcon.png</Icon>
</TemplateData>
<TemplateContent>
<Project TargetFileName="Service.csproj" File="Service.csproj" ReplaceParameters="true">
<Folder Name="App_Data" TargetFolderName="App_Data" />
<Folder Name="App_ReadMe" TargetFolderName="App_ReadMe">
<ProjectItem ReplaceParameters="true" TargetFileName="County.txt" OpenInEditor="true">County.txt</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Elmah.txt">Elmah.txt</ProjectItem>
</Folder>
<ProjectItem ReplaceParameters="true" TargetFileName="IService1.cs">IService1.cs</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="packages.config">packages.config</ProjectItem>
<Folder Name="Properties" TargetFolderName="Properties">
<ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
</Folder>
<ProjectItem ReplaceParameters="false" TargetFileName="Service1.svc">Service1.svc</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Service1.svc.cs">Service1.svc.cs</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Web.config">Web.config</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Web.Debug.config">Web.Debug.config</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Web.Release.config">Web.Release.config</ProjectItem>
</Project>
</TemplateContent>
<WizardExtension>
<Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
<FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
</WizardExtension>
<WizardData>
<packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true">
<package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" />
</packages>
</WizardData>
</VSTemplate>
それが役立つ場合、EntityFramework 参照の Path プロパティは空白です。
Service プロジェクトの場合、.csproj ファイルには次の XML が含まれています。
<Reference Include="EntityFramework">
<HintPath>..\packages\EntityFramework.5.0.0\lib\net45\EntityFramework.dll</HintPath>
</Reference>
私が理解しているのは、パッケージフォルダーのソリューションのルートを見て、そこから移動することです。上記の要素は、新しいソリューションのルートに Packages フォルダーを作成するため、ある程度成功したと思います。それへの参照を更新していないようです。
skipAssemblyReferences を false に変更しようとしましたが、変更はありませんでした。私はとても近くにいるようです。