I'm trying to test ability to have two dynamic link libraries for Windows and macOS in one app so it can choose required by DLLImport
. I'm testing on Azure Pipeline which has following tasks:
So dll and dylib downloaded first from separate pipelines artifacts, then I create new console app with
dotnet new console -n ConsoleApp
then copy dll and dylib files:
Copy-Item test.dylib -Destination ConsoleApp
Copy-Item test.dll -Destination ConsoleApp
then set content for csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="test.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="test.dylib">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
and Program.cs:
using System;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Threading;
namespace ConsoleNetFramework
{
class Program
{
[DllImport("test")]
public static extern int Foo();
static void Main(string[] args)
{
var result = Foo();
Console.WriteLine($"Result = {result}");
}
}
}
And finally run the app with
dotnet run --project ConsoleApp/ConsoleApp.csproj
and get an error:
Unhandled exception. System.DllNotFoundException: Unable to load DLL 'test' or one of its dependencies: Access is denied. (0x80070005 (E_ACCESSDENIED))
at ConsoleNetFramework.Program.Foo()
at ConsoleNetFramework.Program.Main(String[] args) in D:\a\1\s\ConsoleApp\Program.cs:line 15
When the last task ran, we can see that dll and dylib are not copied to output directory:
---- ------------- ------ ----
-a---- 5/12/2021 12:28 PM 5120 ConsoleApp.dll
Directory: D:\a\1\s\ConsoleApp\bin\Debug\net5.0
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/12/2021 12:28 PM 4608 ConsoleApp.dll
Directory: D:\a\1\s\ConsoleApp\obj\Debug\net5.0\ref
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/12/2021 12:28 PM 5120 ConsoleApp.dll
Directory: D:\a\1\s\ConsoleApp\obj\Debug\net5.0
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/12/2021 12:28 PM 4608 ConsoleApp.dll
Directory: D:\a\1\s\ConsoleApp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/12/2021 12:27 PM test.dll
d----- 5/12/2021 12:27 PM test.dylib
So I have no idea why files are not copied to output because I have
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
in the csproj for those files.
On my local machine all these steps are working fine. What am I doing wrong?
User contributions licensed under CC BY-SA 3.0