web-dev-qa-db-ja.com

Azure関数-System.Data.SqlClientはこのプラットフォームではサポートされていません

Azure関数内で次のinsertコードをAzure SQL Server 2014データベースに実行しています。

    private static void Command(SqlConnection sqlConnection, string query)
    {
        var sqlCommand = new SqlCommand(query, sqlConnection);

        try
        {
            sqlConnection.Open();
            sqlCommand.ExecuteNonQuery();
        }
        finally
        {
            sqlConnection?.Close();
        }
    }

次の例外が発生します:

System.Data.SqlClientはこのプラットフォームではサポートされていません

ここでは、使用している依存関係のチェーンを示します。

enter image description here

アプリから簡単なSQLコマンドを実行するにはどうすればよいですか?何が悪いのですか?

最新の安定版4.6.0が必要ない場合は、4.5.1に戻すだけで十分です。

それ以外の場合の回避策は、アセンブリを自分でロードすることです。 Functionプロジェクトを右クリックし、Edit <FunctionAppName>.csprojの下に項目を追加して、関連するアセンブリを出力ディレクトリにコピーします。

  <!-- For publish -->
  <ItemGroup>
    <None Include="$(USERPROFILE)\.nuget\packages\system.data.sqlclient\4.6.0\runtimes\win\lib\netcoreapp2.1\System.Data.SqlClient.dll">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>
  <!-- For local debug -->
  <Target Name="CopyToBin" BeforeTargets="Build">
    <Copy SourceFiles="$(USERPROFILE)\.nuget\packages\system.data.sqlclient\4.6.0\runtimes\win\lib\netcoreapp2.1\System.Data.SqlClient.dll" DestinationFolder="$(OutputPath)\bin" />
  </Target>

このアセンブリ参照の問題を追跡する issue があります。

14
Jerry Liu

System.Data.SqlClientを4.6.0にダウングレードしましたが、それでうまくいきました

どういうわけか、.NET Core 3.0.0を使用するように構成されたAzure Functionsインスタンスでこれに遭遇しました。構成設定を変更しましたFUNCTIONS_EXTENSION_VERSIONbetaから~2。再起動すると、2.0.xを使用するようになり、このエラーはなくなりました。

2
mdickin

EF Coreを使用している場合、v2.1.4が機能するようです。

0
Mike Dean

私の場合、AzureのFunctionAppのFunctionAppSettingsでランタイムバージョン3を2に変更することでこれを解決しました