多目标 .NET 项目中的嵌入式库
Embedded library in multi targeting .NET project
我有一个 .NET 项目,它有 2 个目标框架:netstandard1.6 和 net40。我正在尝试嵌入一个以 netstandard1.3 和 net40 为目标的库(ICU4N 和 J2N)。
我创建了一个 ...\lib\
文件夹,我在其中放置了相应目标的 .dll 库。
我的 .csprog 文件如下所示
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<PropertyGroup Label="Configuration">
<SignAssembly>True</SignAssembly>
<DelaySign>False</DelaySign>
<DocumentationFile>$(TargetDir)bin$(Configuration)$(TargetFramework)\someName.xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworks>netstandard1.6;net40</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<OutputType>library</OutputType>
</PropertyGroup>
...
<PropertyGroup>
<NoWarn>1701;1702;1591;1570;1572;1573;1574;1580;1584;1658</NoWarn>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
<Reference Include="System" />
</ItemGroup>
...
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.6' ">
<PackageReference Include="Microsoft.NETCore.Portable.Compatibility" Version="1.0.1" />
<Reference Include="ICU4N, Version=60.0.0.0, Culture=neutral, PublicKeyToken=efb17c8e4f0e291b">
<HintPath>lib\ICU4N\netstandard1.3\ICU4N.dll</HintPath>
</Reference>
<Reference Include="J2N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f39447d697a969af">
<HintPath>lib\J2N\netstandard1.3\J2N.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
<Reference Include="ICU4N, Version=60.0.0.0, Culture=neutral, PublicKeyToken=efb17c8e4f0e291b">
<HintPath>lib\ICU4N\net40\ICU4N.dll</HintPath>
</Reference>
<Reference Include="J2N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f39447d697a969af">
<HintPath>lib\J2N\net40\J2N.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
当我运行程序时,
System.IO.FileNotFoundException : Could not load file or assembly
'System, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089'.
发出错误,出现此错误是因为文件 ...\bin\Debug\net40\ICU4N.dll
和 ...\bin\Debug\netstandard1.6\ICU4N.dll
相同,但应该不同。
问题是如何配置项目和.csproj文件,使构建时netstandard1.3版本的库进入文件夹...\bin\Debug\netstandard1.6\
,net40版本的库进入文件夹[=16] =],因为现在 net40 版本的库位于文件夹 ...\bin\Debug\netstandard1.6\
和 ...\bin\Debug\net40\
.
提前致谢。
问题出在HintPath
,第一个找到的库被嵌入了。
决定:
为 netstanard1.6 目标块添加以下代码。
<None Remove="lib\ICU4N\net40\ICU4N.dll" />
<None Remove="lib\J2N\net40\J2N.dll" />
我有一个 .NET 项目,它有 2 个目标框架:netstandard1.6 和 net40。我正在尝试嵌入一个以 netstandard1.3 和 net40 为目标的库(ICU4N 和 J2N)。
我创建了一个 ...\lib\
文件夹,我在其中放置了相应目标的 .dll 库。
我的 .csprog 文件如下所示
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<PropertyGroup Label="Configuration">
<SignAssembly>True</SignAssembly>
<DelaySign>False</DelaySign>
<DocumentationFile>$(TargetDir)bin$(Configuration)$(TargetFramework)\someName.xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworks>netstandard1.6;net40</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<OutputType>library</OutputType>
</PropertyGroup>
...
<PropertyGroup>
<NoWarn>1701;1702;1591;1570;1572;1573;1574;1580;1584;1658</NoWarn>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
<Reference Include="System" />
</ItemGroup>
...
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.6' ">
<PackageReference Include="Microsoft.NETCore.Portable.Compatibility" Version="1.0.1" />
<Reference Include="ICU4N, Version=60.0.0.0, Culture=neutral, PublicKeyToken=efb17c8e4f0e291b">
<HintPath>lib\ICU4N\netstandard1.3\ICU4N.dll</HintPath>
</Reference>
<Reference Include="J2N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f39447d697a969af">
<HintPath>lib\J2N\netstandard1.3\J2N.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
<Reference Include="ICU4N, Version=60.0.0.0, Culture=neutral, PublicKeyToken=efb17c8e4f0e291b">
<HintPath>lib\ICU4N\net40\ICU4N.dll</HintPath>
</Reference>
<Reference Include="J2N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f39447d697a969af">
<HintPath>lib\J2N\net40\J2N.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
当我运行程序时,
System.IO.FileNotFoundException : Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
发出错误,出现此错误是因为文件 ...\bin\Debug\net40\ICU4N.dll
和 ...\bin\Debug\netstandard1.6\ICU4N.dll
相同,但应该不同。
问题是如何配置项目和.csproj文件,使构建时netstandard1.3版本的库进入文件夹...\bin\Debug\netstandard1.6\
,net40版本的库进入文件夹[=16] =],因为现在 net40 版本的库位于文件夹 ...\bin\Debug\netstandard1.6\
和 ...\bin\Debug\net40\
.
提前致谢。
问题出在HintPath
,第一个找到的库被嵌入了。
决定: 为 netstanard1.6 目标块添加以下代码。
<None Remove="lib\ICU4N\net40\ICU4N.dll" />
<None Remove="lib\J2N\net40\J2N.dll" />