我的解决方案模板中有3个项目(Model,DataAccess和Service。)其中不止一个需要引用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,我的三个SubProjects中的每一个都是按照我想要的方式创建的。但是,引用EF 5的每个项目都无法连接引用。每个子.vstemplate文件都包含上面的XML,但没有运气。我甚至试图将XML放在root .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文件夹的解决方案的根目录并从那里开始。我怀疑上面的元素有些成功,因为它确实在新解决方案的根目录下创建了一个Packages文件夹。它似乎没有更新对它的引用。
我甚至尝试将skipAssemblyReferences更改为false,并且没有任何更改。好像我差不多。
答案 0 :(得分:2)
事实证明,一旦项目被保存到硬盘驱动器,&#34;软件包&#34;文件夹高了一级。所以为了解决这个问题,我改变了以下内容:
<Reference Include="EntityFramework">
<HintPath>..\packages\EntityFramework.5.0.0\lib\net45\EntityFramework.dll</HintPath>
</Reference>
对此:
<Reference Include="EntityFramework">
<HintPath>..\..\packages\EntityFramework.5.0.0\lib\net45\EntityFramework.dll</HintPath>
</Reference>
注意额外的.. \再上一级。
可悲的是,没有立即照顾它。我不得不清除Visual Studio模板缓存。因此,我必须以管理员身份运行Visual Studio命令提示符并运行以下命令:devenv /installvstemplates
需要几分钟但是一旦完成,一切都按预期工作了!