微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将本机 .dll 引用添加到源生成器项目

如何解决无法将本机 .dll 引用添加到源生成器项目

您可以在 https://github.com/myblindy/GrimBuilding/tree/efcoreefcore 分支)找到完整的源代码

我知道源代码生成器无法自动从 nuget 包中获取依赖项,您必须使用笨拙的解决方法才能使其正常工作,而我已经这样做了。这是我的源代码生成器项目:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <LangVersion>preview</LangVersion>
  </PropertyGroup>

  <ItemGroup>
    <packagereference Include="Microsoft.CodeAnalysis.CSharp" Version="4.0.0-1.final" PrivateAssets="all" />
    <packagereference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" PrivateAssets="all" />
    <packagereference Include="sqlitePCLRaw.bundle_e_sqlite3" Version="2.*-*" GeneratePathProperty="true" PrivateAssets="all" />
    <packagereference Include="Microsoft.Data.sqlite.Core" Version="6.*-*" GeneratePathProperty="true" PrivateAssets="all" />
    <packagereference Include="sqlitePCLRaw.lib.e_sqlite3" Version="2.*-*" GeneratePathProperty="true" PrivateAssets="all" />
    <packagereference Include="sqlitePCLRaw.provider.e_sqlite3" Version="2.*-*" GeneratePathProperty="true" PrivateAssets="all" />
  </ItemGroup>

  <PropertyGroup>
    <GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn>
  </PropertyGroup>

  <Target Name="GetDependencyTargetPaths">
    <ItemGroup>
      <TargetPathWithTargetPlatformMoniker Include="$(PKGsqlitePCLRaw_bundle_e_sqlite3)\lib\netstandard2.0\sqlitePCLRaw.batteries_v2.dll" IncludeRuntimeDependency="false" />
      <TargetPathWithTargetPlatformMoniker Include="$(PKGsqlitePCLRaw_provider_e_sqlite3)\lib\netstandard2.0\sqlitePCLRaw.provider.e_sqlite3.dll" IncludeRuntimeDependency="false" />
      <TargetPathWithTargetPlatformMoniker Include="$(PKGsqlitePCLRaw_lib_e_sqlite3)\runtimes\win-x64\native\e_sqlite3.dll" IncludeRuntimeDependency="false" />
      <TargetPathWithTargetPlatformMoniker Include="$(PKGMicrosoft_Data_sqlite_Core)\lib\netstandard2.0\Microsoft.Data.sqlite.dll" IncludeRuntimeDependency="false" />
    </ItemGroup>
  </Target>
</Project>

由于也没有任何传递支持,我将每个嵌套的 Microsoft.Data.sqlite 包一一添加生成它们的路径属性并使用 TargetPathWithTargetPlatformMoniker 引用它。一切正常,直到我到达本机 e_sqlite3.dll,如果我将 TargetPathWithTargetPlatformMoniker 与它一起使用,它会尝试将其作为托管库进行引用,但它会按预期失败:

4>CSC : warning CS8034: Unable to load Analyzer assembly C:\Users\meep\.nuget\packages\sqlitepclraw.lib.e_sqlite3\2.0.5-pre20210521085756\runtimes\win-x64\native\e_sqlite3.dll : PE image doesn't contain managed Metadata.

既然找到了路径,是否可以使用不同的标记来使主项目复制 e_sqlite3.dll 文件以便分析器可以使用它?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。