Como publicar como um arquivo separado sem ser incluído em um arquivo de execução única
Ambiente
- Estúdio Visual
-
- Visual Studio 2019
- Núcleo ASP.NET
-
- 3.1
O que é um único arquivo?
Além do arquivo exe, muitas vezes você precisará de um arquivo, como um dll para executar um programa. Você distribuirá vários arquivos e programas.
Agora você pode executar todos os arquivos em um ex, publicando o programa usando o recurso "Criar arquivo único" adicionado do .NET Core 3.0. (O arquivo pdb é um arquivo de informações de depuração, então você não precisa distribuí-lo.)
No entanto, em alguns casos, você pode querer colocar um arquivo de configuração em uma pasta com exe em vez de incluí-lo no exe. Esta seção descreve como fazer isso.
Preparando-se para a saída de arquivo único
Como amostra, a configuração do projeto a seguir deve ser usada para carregar o arquivo TextFile1.txt na inicialização. TextFile1.txt destina-se a ser distribuído com o arquivo exe, por isso faça com que "Build Action: None" e "Copy to Output Directory: Copy to New If New". O conteúdo do TextFile1.txt pode ser arbitrário.
Você pode construir um programa com a suposição de que deseja carregar arquivos que são distribuídos juntos.
No entanto, o arquivo executável em um único arquivo é realmente expandido para uma pasta temporária separada quando é executado. Ao carregar um arquivo em um caminho relativo, você deve especificá-lo na pasta onde você iniciou o arquivo executável, não na pasta onde o arquivo executável está localizado.
using System;
using System.Diagnostics;
using System.IO;
namespace ExcludeFromSingleFile
{
class Program
{
static void Main(string[] args)
{
using var processModule = Process.GetCurrentProcess().MainModule;
Console.WriteLine(File.ReadAllText(Path.Combine(Path.GetDirectoryName(processModule.FileName), "TextFile1.txt")));
Console.ReadKey();
}
}
}
Quando você depurar, você pode ver que o arquivo está carregado.
TextFile1.txt também é impresso na pasta de saída porque ainda não foi compilado em um único arquivo.
Vamos publicá-lo como um único arquivo neste estado. O procedimento é omitido porque a publicação não se destina.
O tempo de execução do alvo deve ser não portátil para ser um único arquivo.
Ainda não marquei nada, então é um arquivo como sempre.
Não há textFile1.txt quando você executá-lo, então você terá um erro.
Como publicar um arquivo específico sem incluí-lo em um único arquivo
Abra o arquivo do projeto (csproj) em código com o arquivo que você não deseja incluir no projeto.
Eu acho que é xml assim: Procure o arquivo para o qual deseja alterar as configurações. Dependendo das configurações do seu projeto, você pode não ter um arquivo de destino, então você pode precisar adicioná-lo manualmente.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="TextFile1.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Ao encontrar o arquivo, adicione ExcludeFromSingleFile com verdade, da seguinte forma: Como o nome indica, ele é excluído de um único arquivo.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="TextFile1.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<!-- ここから追加 -->
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<!-- ここまで追加 -->
</None>
</ItemGroup>
</Project>
Por favor, tente publicar uma vez que você tenha salvo. Você pode ver que ele é publicado a partir de um único arquivo.
Você ainda pode executar o arquivo publicado para verificar se ele está funcionando corretamente.