1

BuildAction = Content および Copy to output = Always のファイルを含むアセンブリがあります。今、アセンブリに依存する実行可能ファイルをビルドし、アセンブリが機能するように、VisualStudio/MsBuild が何らかの形でコンテンツ ファイルを出力にコピーすることを期待しています。しかし、それは起こりません。

現在、この問題を手動で解決しています。これらのファイルを実行可能プロジェクトへのリンクとして追加するか、ビルド イベントでコピーします。この問題を自動的に解決する方法はありますか?

4

3 に答える 3

4

プロジェクトを表す.csprojファイルを手動で編集すると、これを実行できます。

たとえば、出力ディレクトリにコピーする必要がある「binaries」というフォルダがあるとします(NoneとCopy to Output Directory Alwaysのビルドアクションを使用することをお勧めしますが、この方法はどちらでも機能します。以下に表示):

「バイナリ」ファイルやフォルダを追加せずに、VisualStudioを閉じます。Windowsエクスプローラーで、プロジェクトディレクトリを参照し、必要なファイルを使用してこの「バイナリ」フォルダーを手動で作成します。次に、プロジェクトの.csprojファイルをテキストエディタで編集します。いくつかの「ItemGroup」タグを含むファイルのセクションを探します。この追加を行う必要があります:

<ItemGroup>
    <None Include="binaries\**\*.*">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
</ItemGroup>

Visual Studioでプロジェクトを再度開くと、正しいビルドアクションとコピー設定が含まれていることがわかります。

代わりに、コンテンツビルドアクションでも同じことができます。

<ItemGroup>
    <Content Include="binaries\**\*.*" />
</ItemGroup>

しかし、私はこれを実際に使用することはあまり成功していません。

これは、この問題に対処する別の回答です。

コンテンツファイルをasp.netプロジェクトファイルに自動的に含める方法はありますか?

于 2012-08-31T01:25:24.733 に答える
0
//this is the class library project
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ClassLibrary1
{
    public class Class1
    {
        public Class1()
        {
            string res = "";
            using (StreamReader sr = new StreamReader("TextFile1.txt"))
            {
                res = sr.ReadToEnd();
            }
            Console.WriteLine("ok dll {0}",res);
            Console.ReadLine();
        }
    }
}
//I add a text file which name is TextFile1.txt with BuildAction = Content and Copy to output = //Always 
//it contains a sentence
i am in the file no problem


//a console application that refers the class library
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using ClassLibrary1;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c = new Class1();

        }
    }
}


//it is ok, with a rebuild all if you update the text file...
于 2012-08-29T12:04:45.983 に答える
0

BuildAction を EmbeddedResource に変更すると、アセンブリ内にあり、簡単にアクセスできます。

于 2012-09-01T23:25:38.720 に答える