希望你能帮助我,因为我没有想法。我在我的项目中使用了经过良好测试的Entity Framework 6,并且效果很好。

直到我决定将Everythig合并到一个.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="&quot;..\packages\ilmerge.2.14.1208\tools\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(AssembliesToMerge->'&quot;%(FullPath)&quot;', ' ')"/>
      <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
   </Target>
</Project>


成功编译后,我运行解决方案并遇到运行时错误


  为entityFramework创建配置节处理程序时发生错误:无法加载文件或程序集“ EntityFramework,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”或其依赖项之一。


有任何想法吗?顺便说一句...合并后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参考文献相同。

关于c# - 与ILMerge合并后找不到 Entity Framework ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36909159/

10-11 19:31