質問
.NET Standard クラスライブラリを .NET Framework のプロジェクトで参照したとき、.NET Framework の出力先フォルダにDLLが大量に出力されます。
このようにたくさんのDLLが出力される理由をご教示いただきたいです。
また、もしこのようなDLL出力をやめる方法があれば合わせてご教示いただければ幸いでございます。
環境情報
OS: Windows 10 Pro 64bit (1803)
IDE: Visual Studio Community 2017 (v15.8.1)
.NET Framework: 4.6.1
.NET Standard: 2.0
言語: C#
[サンプルプロジェクト情報]
HelloStandard : クラスライブラリ (.NET Standard)
HogeConsole: コンソールアプリ (.NET Framework)
私見
認識の間違いは是非ご指摘頂戴したいのですが、
私の考えとしては、netstandard.dll
のもつ依存関係が原因かな、と思っております。
ただ、.NET Standard 2.0 は .NET Framework 4.6.1 をサポートしており、Frameworkだけがもつ部分は別として、Standard と Framework で異なる依存関係をもつということがしっくりきません。
(しかしながら、そもそも理解不足もあると思います)
質問の背景
実行ファイルを配布する際、何らかの不手際でDLLのコピー漏れが発生するリスクが高く、依存関係のあるファイルは少なくしたいという思いがあり、質問いたしました。
自動化すれば問題ないか...とも思いましたが、その自動化スクリプトのチェック自体が煩雑になることと、今後リリースの度、たくさんのDLL(もちろん改造に伴って追加されるDLLも)に漏れがないかどうか確認するのは骨が折れると思っています。
.NET Standardのクラスライブラリを作成しようと思った理由としては、時代の流れというのが一番の理由ですが、既存資産を.NET Standardクラスライブラリに移行し、Windows以外のプラットフォームにも展開可能な状態にしておきたいという判断からです。
サンプルプロジェクトのソースコード
プロジェクト: HelloStandard
HelloStandard.cs
csharp
1using System; 2 3namespace Standard 4{ 5 public class HelloStandard 6 { 7 public HelloStandard(string message) 8 { 9 Message = message; 10 } 11 12 public string Message { get; } 13 14 public void PrintOut() 15 { 16 Console.WriteLine(Message); 17 } 18 } 19}
HelloStandard.csproj
xml
1<Project Sdk="Microsoft.NET.Sdk"> 2 3 <PropertyGroup> 4 <TargetFramework>netstandard2.0</TargetFramework> 5 <RootNamespace>Standard</RootNamespace> 6 </PropertyGroup> 7 8</Project>
プロジェクト: HogeConsole
Program.cs
csharp
1using Standard; 2 3namespace HogeConsole 4{ 5 internal class Program 6 { 7 private static void Main(string[] args) 8 { 9 var helloStandard = new HelloStandard("Hello .NET Standard!!"); 10 helloStandard.PrintOut(); 11 } 12 } 13}
Hello .NET Standard!!
App.config
xml
1<?xml version="1.0" encoding="utf-8" ?> 2<configuration> 3 <startup> 4 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> 5 </startup> 6</configuration>
HogeConsole.csproj
xml
1<?xml version="1.0" encoding="utf-8"?> 2<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 3 <Import Project="$(MSBuildExtensionsPath)$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 4 <PropertyGroup> 5 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 6 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 7 <ProjectGuid></ProjectGuid> 8 <OutputType>Exe</OutputType> 9 <RootNamespace>HogeConsole</RootNamespace> 10 <AssemblyName>HogeConsole</AssemblyName> 11 <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> 12 <FileAlignment>512</FileAlignment> 13 <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 14 <Deterministic>true</Deterministic> 15 </PropertyGroup> 16 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 17 <PlatformTarget>AnyCPU</PlatformTarget> 18 <DebugSymbols>true</DebugSymbols> 19 <DebugType>full</DebugType> 20 <Optimize>false</Optimize> 21 <OutputPath>bin\Debug\</OutputPath> 22 <DefineConstants>DEBUG;TRACE</DefineConstants> 23 <ErrorReport>prompt</ErrorReport> 24 <WarningLevel>4</WarningLevel> 25 </PropertyGroup> 26 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 27 <PlatformTarget>AnyCPU</PlatformTarget> 28 <DebugType>pdbonly</DebugType> 29 <Optimize>true</Optimize> 30 <OutputPath>bin\Release\</OutputPath> 31 <DefineConstants>TRACE</DefineConstants> 32 <ErrorReport>prompt</ErrorReport> 33 <WarningLevel>4</WarningLevel> 34 </PropertyGroup> 35 <ItemGroup> 36 <Reference Include="System" /> 37 <Reference Include="System.Core" /> 38 <Reference Include="System.Xml.Linq" /> 39 <Reference Include="System.Data.DataSetExtensions" /> 40 <Reference Include="Microsoft.CSharp" /> 41 <Reference Include="System.Data" /> 42 <Reference Include="System.Net.Http" /> 43 <Reference Include="System.Xml" /> 44 </ItemGroup> 45 <ItemGroup> 46 <Compile Include="Program.cs" /> 47 <Compile Include="Properties\AssemblyInfo.cs" /> 48 </ItemGroup> 49 <ItemGroup> 50 <None Include="App.config" /> 51 </ItemGroup> 52 <ItemGroup> 53 <ProjectReference Include="..\HelloStandard\HelloStandard.csproj"> 54 <Project></Project> 55 <Name>HelloStandard</Name> 56 </ProjectReference> 57 </ItemGroup> 58 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 59</Project>
以上です。どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/03 02:09