Pergunta

Meu autônomo pequeno C # projeto requer um número moderado (ca 100) de arquivos (XML) que são necessários para fornecer valores específicos de domínio em tempo de execução. Eles não são obrigados a ser visíveis para os usuários. No entanto eu preciso adicionar a eles ou atualizá-los de vez em quando que estou preparado para fazer manualmente (ou seja, eu não prevêem uma ferramenta específica, especialmente porque eles podem ser criados fora do sistema).

Eu gostaria que eles sejam relocatable (ou seja, usar nomes de arquivos relativos). Quais as opções que eu deveria considerar para organizá-los e quais seriam as chamadas necessário para abrir e lê-los?

O projeto é essencialmente independente (não relacionados com serviços web, bancos de dados ou outros aplicativos de terceiros). Está organizado em um pequeno número de namespaces e toda a lógica para os arquivos pode ser confinado a um único namespace.

========= Lamento por ser incerto. Tentarei novamente. Em uma aplicação Java é possível incluir arquivos de recursos que são lidas em relação ao classpath, não para o .exe final *. Eu acredito que há uma maneira de fazer uma coisa semelhante em C #.

========= Eu acredito que eu deveria estar usando somthing relacionadas com RESX. Veja (resx e dados XML https://stackoverflow.com/posts/1205872/edit ). Eu posso colocar cordas em um resx, mas isso é tedioso e propenso a erros e eu preferiria copiá-los para o local apropriado.

Lamento não ser claro, mas não tenho certeza de como fazer a pergunta.

========= A questão parece ser muito perto ( C # equivalente a getClassLoader (). GetResourceAsStream (...) ). Eu gostaria de ser capaz de adicionar os arquivos em VisualStudio -? A minha pergunta é onde posso colocá-los e como faço para indicar que eles são recursos

Foi útil?

Solução 3

Há uma resposta detalhada sobre http://www.attilan.com/2006 /08/accessing_embedded_resources_u.php . Parece que o arquivo deve ser especificado como um EmbeddedResource. Eu ainda não tenho isso para o trabalho, mas é o que eu quero.

Outras dicas

Se você colocá-los em uma subpasta em relação ao seu executável, .\Config digamos que você seria capaz de acessá-los com File.ReadAllText(@"Config\filename.xml").

Se você tiver um aplicativo ASP.NET você poderia colocá-los dentro da pasta App_Data especial e acessá-los com File.ReadAllText(Server.MapPath("~/App_Data/filename.xml"))

Eu sou ainda claro se você tem uma vitória formas, ou projeto web ... Independentemente disso, o uso de nomes de arquivos relativos não é obrigado a tê-los relocatable. Eu sugeriria adicionando uma entrada no seu web.config ou seção appSettings app.config do arquivo contendo o caminho completo para os arquivos xml. Se eles são movidos, tudo que você tem a fazer é mudar o seu arquivo de configuração.

<!-- app/web.config --->
<appSettings>
        <add key="filelocation" value="c:\xmlfiles"/>
</appSettings>

//c# code (in ASP.NET app, for example)
using System.IO;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string path = ConfigurationManager.AppSettings["filelocation"];
        DirectoryInfo di = new DirectoryInfo(path);
        List<XDocument> xmlDocs = new List<XDocument>();
        foreach (FileInfo fi in di.GetFiles())
        {
            xmlDocs.Add(XDocument.Load(fi.FullName));
        }
    }
}

Claro que você pode ou não pode saber os nomes de arquivo xml, para que você não pode carregar-se e lê-los no exatamente da mesma maneira.

No seu caso parece totalmente apropriado para colocá-los na sua pasta App_Data se você tem um site ASP.NET (supondo que ele nunca vai estar em mais de um servidor). Só tome cuidado se você listar "~ / App_Data" em seu arquivo de configuração que você sabe para traduzir isso em um caminho completo como Darin fez com Server.MapPath ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top