J'écris un programme sur mon ordinateur portable que j'ai besoin de lancer sur mon ordinateur de travail après l'avoir publié. Le programme fait un tas de travail de base de données, puis ouvre un document Word et relie la fusion et publipostage aux données. Tout fonctionne bien dans le débogage. Il plante après avoir été publié sur mon ordinateur portable et sur mon ordinateur de bureau. J'ai isolé le problème mais je ne sais pas comment le résoudre.Les fichiers de contenu VB.Net Data (.mdb) ne sont pas disponibles après la publication. Qu'est-ce que je rate?
Il semble que le fichier .mdb, que le fichier .docx veut lire, n'est pas copié dans le répertoire App_Data
au moment de l'exécution. C'est bizarre parce que j'ai le fichier .docx et le fichier .mdb dans le projet en tant que fichiers content
. Le fichier .docx apparaît dans ce dossier et mon programme l'ouvre très bien. La seule chose différente à propos du fichier .mdb est qu'il est également une source de données dans le projet et a été introduit en ajoutant la source de données au lieu de simplement ajouter le document lui-même et de faire l'action de construction content
. Evidemment c'est comme ça que ça marche, mais ... Voici enfin la question ... Comment obtenir le fichier .mdb du produit fini à copier dans le dossier App_Data
afin que mon fichier .docx puisse en lire?
Voici les lignes de code que je utilise maintenant que je pensais devrait fonctionner:
Dim w As New Word.Application
Try
Dim Folder As String = My.Application.Info.DirectoryPath.ToString
'MsgBox(Folder)
Dim Path As String = Folder & "\StandardLetter.docx"
w.Documents.Open(Path, [ReadOnly]:=True)
w.WindowState = Word.WdWindowState.wdWindowStateMaximize
w.Visible = True
w.Activate()
Catch ex As Exception
MsgBox("Couldn't open the document.")
Exit Sub
End Try
Try
Dim AccessFolder As String = My.Application.Info.DirectoryPath.ToString
w.ActiveDocument.MailMerge.OpenDataSource(AccessFolder & "\RenewalTemp.mdb")
'This does not work after publishing because RenewalTemp.mdb doesn't appear in the AppData Folder
Catch ex As Exception
MsgBox("Error accessing the RenewalLetterTemp Database.")
MsgBox("Path = " & My.Application.Info.DirectoryPath.ToString & "\RenewalTemp.mdb")
Exit Sub
End Try
EDIT - Je l'ai réduit encore le problème, mais encore ne l'ai pas résolu. Il se trouve le problème réside dans le répertoire référencé par ce code:
Dim AccessFolder As String = My.Application.Info.DirectoryPath.ToString
Cela fonctionne très bien au cours de débogage, car il fait référence au dossier \ bin \ debug et les fichiers .mdb y aller pendant le débogage. Dans BUILD, ils vont à un endroit non référencé par le code ci-dessus. Je ne sais pas comment référencer l'emplacement, mais il doit y avoir un bon moyen. En outre, le nom du répertoire contient un tas de caractères qui semblent être générés de manière aléatoire, donc je ne sais pas comment je coderais l'emplacement en dur non plus. Voici les deux répertoires:
Dim AccessFolder As String = My.Application.Info.DirectoryPath.ToString
C:\Users\lholk\AppData\Local\Apps\2.0\OGMYVLOB.LZH\TD1N8EZX.KAN\rene..tion_7dc5ad3db20d2410_0001.0000_fee3b96b6598cca2
Dim AccessFolder As String = '??? I Don't know what should go here
C:\Users\lholk\AppData\Local\Apps\2.0\OGMYVLOB.LZH\TD1N8EZX.KAN\rene...exe_7dc5ad3db20d2410_0001.0000_none_6758ee3059fd9f2f
Je l'ai regardé autour de moi dans l'espace My.Application mais ne l'ai pas vu quoi que ce soit d'autre utile là-dedans. Pouvez-vous aider? EDIT 2 - Si je me réfère à TableAdapter pour le .mdb, je peux obtenir la sortie suivante, ce qui est presque ce que je dois:
Dim Tbl As New RenewalTempDataSetTableAdapters.RenewalLettersTableAdapter
Dim RightFolder As String = Tbl.Connection.DataSource
'Returns "|Data Directory|\RenewalTemp.mdb"
Je sais que quelque part « sous le capot » il doit y avoir une variable qui peut produire le réel | comme il est fait référence ici entre le | | symboles
Définissez 'CopyToOutputDirectory' sur' CopyAlways'. –
Il est déjà configuré de cette façon. –
Alors c'est ** wierd. –