Archives

Archives / 2021 / February
  • Compiling DirectShow.Net for use in .NET 5

    In a previous blog post, I wrote about how to access webcam properties from C# using DirectShow.Net. The last release of the library is version 2.1 from February 2010, with project files for Visual Studio 2008.

    Fortunately, porting the project to compile for .NET 5 went pretty quick.

    The project file

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>net5.0-windows</TargetFramework>
        <RootNamespace>DirectShowLib</RootNamespace>
        <SignAssembly>true</SignAssembly>
        <AssemblyOriginatorKeyFile>DShowNET.snk</AssemblyOriginatorKeyFile>
        <DelaySign>false</DelaySign>
        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
        <PackageId>DirectShowLib.Net</PackageId>
        <Authors>http://sourceforge.net/projects/directshownet/</Authors>
      </PropertyGroup>
    
    </Project>

    Things to note:

    • The target framework is net5.0-windows because the code (obviously) uses Windows-specific features.
    • I added <GenerateAssemblyInfo>false<GenerateAssemblyInfo> to use the AssemblyInfo.cs file that came with the original project.

    AssemblyInfo.cs

    The following modifications were necessary:

    • Change AssemblyVersion from 2.1.0.* to 2.1.0.0 because the compiler complained about the wildcard.
    • Remove the lines related to the .snk file (now handled in the project file).
    • Add SupportedOSPlatform("windows").
    using System;
    using System.Reflection;
    using System.Runtime.InteropServices;
    using System.Security.Permissions;
    
    
    [assembly : AssemblyTitle("DirectShow Net Library")]
    [assembly : AssemblyDescription(".NET Interfaces for calling DirectShow.  See http://directshownet.sourceforge.net/")]
    [assembly : AssemblyConfiguration("")]
    [assembly : AssemblyCompany("")]
    [assembly : Guid("6D0386CE-37E6-4f77-B678-07C584105DC6")]
    [assembly : AssemblyVersion("2.1.0.0")]
    #if DEBUG
    [assembly : AssemblyProduct("Debug Version")]
    #else
    [assembly : AssemblyProduct("Release Version")]
    #endif
    [assembly : AssemblyCopyright("GNU Lesser General Public License v2.1")]
    [assembly : AssemblyTrademark("")]
    [assembly : AssemblyCulture("")]
    [assembly : AssemblyDelaySign(false)]
    // Path is relative to the resulting executable (\Bin\Debug)
    #if USING_NET11
    [assembly : AssemblyKeyFile("..\\..\\DShowNET.snk")]
    #endif
    [assembly : AssemblyKeyName("")]
    [assembly : ComVisible(false)]
    [assembly : CLSCompliant(true)]
    [assembly : SecurityPermission(SecurityAction.RequestMinimum, UnmanagedCode=true)]
    [assembly: System.Runtime.Versioning.SupportedOSPlatform("windows")]
    

    LGPL

    The DirectShow.Net library is licensed under the Lesser General Public License (LGPL) Version 2.1.

    To be able distribute my software at some point in the future, the LGPL license requires – in addition to proper attribution – to

    • ship the library as an individual DLL (instead of ripping out just the parts that I need), and to
    • make the source code available publicly.

    In order to comply with the LGPL, I published my fork of the library on https://github.com/RWeigelt/DirectShow.Net.

    Please note that I did not perform any tests of features that go beyond accessing webcam properties. The library compiles, I can use it in my project, and so far it did not break my code – that’s good enough for me at this moment…