gpt4 book ai didi

c# - 将绑定(bind)重定向配置应用于 pythonnet

转载 作者:行者123 更新时间:2023-12-01 02:49:57 26 4
gpt4 key购买 nike

我有一个依赖 NuGet 的应用程序 <bindingRedirect>功能以确保 log4net.dll 的单一版本。绑定(bind)重定向会自动添加到应用程序的 app.config 文件中。

我想将该应用程序的程序集加载到 Python 中并调用其代码,但由于绑定(bind)重定向是特定于应用程序的,因此 Pythonnet 不会拾取它们,并且程序集无法加载:

LOG: Post-policy reference: log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
[...snip...]
LOG: Assembly Name is: log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
WRN: Comparing the assembly name resulted in the mismatch: Major Version

我可以让 pythonnet 引用我的应用程序的 app.config 并使用 <bindingRedirect>在那里找到的?或者我可以在启动后应用绑定(bind)重定向,而不需要 app.config 吗?

最佳答案

以下是如何启用app.config使用 CPython 中的 .NET 程序集时使用 pythonnet:

地点 python.exe.config文件下一个python.exe稍后进行检测的配置如下:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="customAppSettingsGroup">
<section name="customAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration" />
</sectionGroup>
</configSections>
<customAppSettingsGroup>
<customAppSettings>
<add key="Debugger" value="True"/>
</customAppSettings>
</customAppSettingsGroup>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>

使用以下代码生成 .NET 程序集以测试和读取 app.config 设置:

using System;

using System.Collections.Specialized;
using System.Configuration;

namespace dotnet20
{
public class Class1
{
public Class1()
{
NameValueCollection settings =
ConfigurationManager.GetSection("customAppSettingsGroup/customAppSettings") as NameValueCollection;

if (settings != null)
{
foreach (string key in settings.AllKeys)
{
if ((key == "Debugger") && (settings[key] == "True"))
{
Console.WriteLine("Detected debugger mode");
}
}
}
}
}
}

现在测试 pythonnet 是否能够从 app.config 检测这些自定义设置:

python
Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import clr
>>> import sys
>>> sys.path.append(r"C:\pythonnet\dotnet2.0\bin\Debug")
>>> clr.AddReference("dotnet2.0")
<System.Reflection.RuntimeAssembly object at 0x000001A51626D630>
>>> from dotnet20 import Class1
>>> Class1()
Detected debugger mode
<dotnet20.Class1 object at 0x000001A51626D6A0>
>>>

关于c# - 将绑定(bind)重定向配置应用于 pythonnet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44905819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com