Entity Framework 与 ILMerge 合并后找不到
Entity Framework can not be found after merging with ILMerge
希望你能帮帮我,因为我运行出主意了。我在我的项目中使用 Entity Framework 6,它经过了良好的测试并且工作得非常完美。
直到我决定将所有内容合并到一个 .exe
文件中。从那以后,我遇到了问题。对于这个任务,我决定使用 ILMerge
。将它安装为 nuget 包并写了一个 Ilmerge.CSharp.targets
像这样:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Target Name="AfterBuild">
<CreateItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(Extension)'=='.dll'">
<Output ItemName="AssembliesToMerge" TaskParameter="Include" />
</CreateItem>
<PropertyGroup>
<ReferenceAssemblies>C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5</ReferenceAssemblies>
</PropertyGroup>
<Exec Command=""..\packages\ilmerge.2.14.1208\tools\Ilmerge.exe" /out:@(MainAssembly) "@(IntermediateAssembly)" @(AssembliesToMerge->'"%(FullPath)"', ' ')"/>
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>
</Project>
编译成功后,我 运行 我的解决方案出现 运行 时间错误
An error occurred creating the configuration section handler for entityFramework: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.
有什么想法吗?顺便说一句...合并后Log4Net似乎也不起作用。
感谢您的帮助!
在您的配置文件 (app.config) 中,您很可能有这样的内容:
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<!-- more stuff here -->
</configuration>
注意EntityFramework程序集中有多行引用类型,例如:
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
但是在将所有内容合并到一个程序集之后 - 再也找不到 EntityFramework dll。您必须修复这些引用以指向 您的主程序集 。假设您的应用程序 .exe 名为 MergeTest.exe。然后要解决此问题,将每次出现的 EntityFramework 引用替换为 MergeTest:
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, MergeTest" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, MergeTest">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, MergeTest" />
</providers>
</entityFramework>
<!-- More stuff here -->
</configuration>
与 log4net 引用相同。
希望你能帮帮我,因为我运行出主意了。我在我的项目中使用 Entity Framework 6,它经过了良好的测试并且工作得非常完美。
直到我决定将所有内容合并到一个 .exe
文件中。从那以后,我遇到了问题。对于这个任务,我决定使用 ILMerge
。将它安装为 nuget 包并写了一个 Ilmerge.CSharp.targets
像这样:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Target Name="AfterBuild">
<CreateItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(Extension)'=='.dll'">
<Output ItemName="AssembliesToMerge" TaskParameter="Include" />
</CreateItem>
<PropertyGroup>
<ReferenceAssemblies>C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5</ReferenceAssemblies>
</PropertyGroup>
<Exec Command=""..\packages\ilmerge.2.14.1208\tools\Ilmerge.exe" /out:@(MainAssembly) "@(IntermediateAssembly)" @(AssembliesToMerge->'"%(FullPath)"', ' ')"/>
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>
</Project>
编译成功后,我 运行 我的解决方案出现 运行 时间错误
An error occurred creating the configuration section handler for entityFramework: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.
有什么想法吗?顺便说一句...合并后Log4Net似乎也不起作用。
感谢您的帮助!
在您的配置文件 (app.config) 中,您很可能有这样的内容:
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<!-- more stuff here -->
</configuration>
注意EntityFramework程序集中有多行引用类型,例如:
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
但是在将所有内容合并到一个程序集之后 - 再也找不到 EntityFramework dll。您必须修复这些引用以指向 您的主程序集 。假设您的应用程序 .exe 名为 MergeTest.exe。然后要解决此问题,将每次出现的 EntityFramework 引用替换为 MergeTest:
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, MergeTest" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, MergeTest">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, MergeTest" />
</providers>
</entityFramework>
<!-- More stuff here -->
</configuration>
与 log4net 引用相同。