【问题标题】:Usage of csc linkresource optioncsc 链接资源选项的使用
【发布时间】:2020-02-04 20:55:36
【问题描述】:

我有使用本机 dll 的 .net 程序集。 IIS 将文件复制到“临时 ASP.NET 文件”文件夹。我希望 IIS 将 dll 与本机 dll 一起复制。我尝试使用清单依赖项但没有成功。我听说我可以使用 csc 选项 -linkresource 用于本机 dll,如 here 所述

将 A.cs 编译成 DLL,链接到本机 DLL N.dll,然后将 全局程序集缓存 (GAC) 中的输出。在这个例子中,两个 A.dll N.dll 将驻留在 GAC 中。

csc -linkresource:N.dll -t:library A.cs gacutil -i A.dll

我想使用这个选项,但是

此编译器选项在 Visual Studio 中不可用,并且不能 以编程方式更改。

但他们强迫我不要使用 Visual Studio 项目并直接由 csc 构建它。这是一项过于艰巨的任务。

我可以更改项目文件来完成这项任务吗?

saw这篇文章已经过时并且不包含任何有用的信息。我用的是 2019 Visual Studio。

【问题讨论】:

    标签: c# asp.net visual-studio iis msbuild


    【解决方案1】:

    解决方案对于 2019 Studio 来说太简单了!

    我刚刚在项目文件中添加了几行......瞧!

      <ItemGroup>
        <LinkResource Include="..\Debug\NativeDll64.dll">
          <Link>NativeDll64.dll</Link>
        </LinkResource>
        <LinkResource Include="..\Debug\NativeDll32.dll">
          <Link>NativeDll32.dll</Link>
        </LinkResource>
      </ItemGroup>
    

    现在这两个文件与托管程序集一起被复制到 GAC 或临时 ASP.NET 文件中。

    【讨论】:

    • 很高兴知道您找到了解决问题的方法,请考虑将其标记为self-answer 以帮助将有用的信息分享给其他人:)
    【解决方案2】:

    看来你是在IIS中运行你的应用,除了覆盖CoreCompile目标,或许你也可以考虑关闭shadow copying

    web.config 中将shadowCopyBinAssemblies 设置为false

    <configuration>
      ...
      <system.web>
        ...
        <hostingEnvironment shadowCopyBinAssemblies="false" />
    

    然后它将从bin 文件夹而不是Temporary 文件夹加载程序集。 copy native assemblies 到 bin 文件夹更容易。许多有关 msbuild 的主题都可以为您提供帮助。更多卷影复制详情请参考this blog

    【讨论】:

    • 感谢您的回答,但我对卷影复制感兴趣,因为它使升级安装更容易。所以,这是万不得已的办法。
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 2020-09-17
    • 1970-01-01
    相关资源
    最近更新 更多