如何排除程序集被打包到 PublishSingleFile 应用程序中
How to exclude an assembly from being packed into a PublishSingleFile app
.NET Core 和 .NET 5 具有 single file executable 功能。
如何排除托管程序集被打包到该单个文件中?
示例:我可能希望 app.exe
包括 MyLib.A.dll
和 MyLib.B.dll
,但不包括 MyLib.Special.dll
。相反,我可能希望 MyLib.Special.dll
驻留在 app.exe
旁边的磁盘上并从那里加载。
(背景:可能 MyLib.Special.dll
是根据 L-GPL 许可的,但 app.exe
是专有的。)
您的程序集名称 libxxx.dll
令人困惑,原因如下:
以lib
命名的库符合unix/linux 系统中的命名约定。但是 dll
仅在 Windows 中使用。有 foo.dll
或 libfoo.so
/libfoo.dylib
.
以 libfoo.so
或 foo.dll
命名的库表示它们是本机程序集,但本机程序集作为依赖项不会在 MSBuild 中自动处理,除非明确配置。 .NET 托管程序集的命名方式类似于 Foo.Bar.dll
.
假设根据 LGPL 许可的库是本机程序集,单个文件发布功能根本不包括它,因此您可能必须使用复制任务配置项目 MSBuild 文件以手动从中复制程序集文件项目文件夹到发布输出文件夹,其中必须包含此配置到 prevent it from being bundled:
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
您可以在 ProjectReference 元素内使用 ExcludeFromSingleFile 来防止程序集被嵌入,如下所示:
<ItemGroup>
<ProjectReference Include="MyLib.Special.csproj">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</ProjectReference>
</ItemGroup>
.NET Core 和 .NET 5 具有 single file executable 功能。
如何排除托管程序集被打包到该单个文件中?
示例:我可能希望 app.exe
包括 MyLib.A.dll
和 MyLib.B.dll
,但不包括 MyLib.Special.dll
。相反,我可能希望 MyLib.Special.dll
驻留在 app.exe
旁边的磁盘上并从那里加载。
(背景:可能 MyLib.Special.dll
是根据 L-GPL 许可的,但 app.exe
是专有的。)
您的程序集名称 libxxx.dll
令人困惑,原因如下:
以
lib
命名的库符合unix/linux 系统中的命名约定。但是dll
仅在 Windows 中使用。有foo.dll
或libfoo.so
/libfoo.dylib
.以
libfoo.so
或foo.dll
命名的库表示它们是本机程序集,但本机程序集作为依赖项不会在 MSBuild 中自动处理,除非明确配置。 .NET 托管程序集的命名方式类似于Foo.Bar.dll
.
假设根据 LGPL 许可的库是本机程序集,单个文件发布功能根本不包括它,因此您可能必须使用复制任务配置项目 MSBuild 文件以手动从中复制程序集文件项目文件夹到发布输出文件夹,其中必须包含此配置到 prevent it from being bundled:
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
您可以在 ProjectReference 元素内使用 ExcludeFromSingleFile 来防止程序集被嵌入,如下所示:
<ItemGroup>
<ProjectReference Include="MyLib.Special.csproj">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</ProjectReference>
</ItemGroup>