0

我知道那里有很多线索和问题。所以,请让我在这里澄清一下情况。

我正在使用Visual c#、vsto 和 add-in express framework开发 Ms-Word 插件。我从 nuget 包管理器添加了一个 log4net 组件。当我尝试构建或调试项目时。它工作得很好。

但就在我尝试使用插件快速扩展创建设置项目时(右键单击项目>插件快速>创建设置项目)。点击后它给了我一个错误(在弹出窗口中)

无法加载文件或程序集“log4net,版本=2.0.8.0 Cultural=neutral,PublicKeyToken=669e0ddf0bb1aa2a”或其依赖项之一。该系统找不到指定的文件。

我已经检查了版本、我的项目中 log4net.dll 的多个引用、package.config 和 project.csproj 文件中的路径。所有这些都没有问题。

当我尝试从头开始创建一个新的类似项目时,添加 log4net。有效。但不是与当前项目。可能的原因是什么?

我将不胜感激任何帮助。我真的陷入了困境。

以下是配置:

项目目标框架为“ .Net framework 4

包配置

<packages>
  <package id="Apache.NMS" version="1.7.1" targetFramework="net40" />
  <package id="Apache.NMS.ActiveMQ" version="1.7.2" targetFramework="net40" />
  <package id="log4net" version="2.0.8" targetFramework="net40" />
  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net40" />
</packages>

应用程序配置

<configSections>    
...
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL" />
...
</configSections>
<log4net>
      <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <param name="File" value="logFile.log"/>
        <param name="DatePattern" value="'logFile_'yyyy-MM-dd'.log'"/>
        <preserveLogFileNameExtension value="true" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="5" />
        <maximumFileSize value="5MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %level %logger - %message %newline %exception" />
        </layout>
      </appender>
      <root>
        <level value="INFO"/>
        <appender-ref ref="RollingFileAppender"/>
      </root>
    </log4net>

产品.csproj

<ItemGroup>
<Reference Include="Accessibility" />
<Reference Include="AddinExpress.MSO.2005, Version=8.2.4371.0, Culture=neutral, PublicKeyToken=4416dd98f0861965, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Add-in Express\Add-in Express for .NET\Bin\AddinExpress.MSO.2005.dll</HintPath>
</Reference>
<Reference Include="AddinExpress.OL.2005, Version=8.2.4371.2005, Culture=neutral, PublicKeyToken=e69a7e0f3592d2b8, processorArchitecture=MSIL" />
<Reference Include="AddinExpress.ToolbarControls.2005, Version=8.2.4371.2005, Culture=neutral, PublicKeyToken=16211aef6795d6cc, processorArchitecture=MSIL" />
<Reference Include="AddinExpress.WD.2005, Version=7.5.4072.2005, Culture=neutral, PublicKeyToken=e69a7e0f3592d2b8, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="ADXOLWizard.2005, Version=8.2.4371.2005, Culture=neutral, processorArchitecture=MSIL" />
<Reference Include="Apache.NMS">
  <HintPath>..\packages\Apache.NMS.1.7.1\lib\net40\Apache.NMS.dll</HintPath>
</Reference>
<Reference Include="Apache.NMS.ActiveMQ">
  <HintPath>..\packages\Apache.NMS.ActiveMQ.1.7.2\lib\net40\Apache.NMS.ActiveMQ.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
  <HintPath>..\packages\log4net.2.0.8\lib\net40-full\log4net.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Office.Interop.Outlook, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
  <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
  <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Office.Tools.Word, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Vbe.Interop, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
  <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
  <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
  <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.configuration" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Data" />
<Reference Include="System.DirectoryServices" />
<Reference Include="System.DirectoryServices.AccountManagement" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml" />
<Reference Include="UIAutomationProvider" />
<Reference Include="WindowsBase" />
<Reference Include="WindowsFormsIntegration" />

4

1 回答 1

1

我以前有这个问题。就我而言,问题在于不同组件使用相同 NuGet 的不同版本。解决方案是添加程序集绑定,基本上设置一个映射,说“当任何版本的 log4net 引用从 0.0.0.0 到 2.0.8.0 时,只需使用 2.0.8.0”。

尝试在您的app.config. 如果它已经存在,请确保版本正确(更新 NuGet 包时,有时会不同步)。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0" />
        </dependentAssembly>
        ...
    </assemblyBinding>
</runtime>
于 2017-11-14T14:43:50.243 回答